diff options
| author | schererleander <leander@schererleander.de> | 2026-02-05 12:03:07 +0100 |
|---|---|---|
| committer | schererleander <leander@schererleander.de> | 2026-02-05 15:19:41 +0100 |
| commit | 3b13d9a2a367db84d48940460532c17a374bb488 (patch) | |
| tree | 599110a39c4baecf3991fe9a58d0103a43c38896 /modules | |
| parent | 46aa4842b98d9215baca00060c233f386a0c2188 (diff) | |
feat(modules): use dendritic pattern
Diffstat (limited to 'modules')
83 files changed, 1468 insertions, 1933 deletions
diff --git a/modules/flake-parts.nix b/modules/flake-parts.nix new file mode 100644 index 0000000..d5db132 --- /dev/null +++ b/modules/flake-parts.nix @@ -0,0 +1,12 @@ +{ inputs, ... }: +{ + imports = [ + inputs.flake-parts.flakeModules.modules + ]; + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; +} diff --git a/modules/flake/darwin.nix b/modules/flake/darwin.nix deleted file mode 100644 index cc59bf6..0000000 --- a/modules/flake/darwin.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - inputs, - config, - self, - ... -}: - -{ - flake.darwinConfigurations = { - lilith = inputs.nix-darwin.lib.darwinSystem { - system = "aarch64-darwin"; - specialArgs = { - inherit inputs; - host = "lilith"; - }; - modules = [ - inputs.home-manager.darwinModules.home-manager - { - home-manager.extraSpecialArgs = { inherit inputs; }; - home-manager.sharedModules = [ config.flake.homeModules.default ]; - } - (self + /hosts/lilith/configuration.nix) - { - nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - } - ]; - }; - }; -} diff --git a/modules/flake/home.nix b/modules/flake/home.nix deleted file mode 100644 index 2ac2b45..0000000 --- a/modules/flake/home.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ inputs, self, ... }: - -let - inherit (inputs.nixpkgs) lib; - import-tree = inputs.import-tree.withLib lib; - - homeModuleFiles = import-tree.leafs (self + /modules/home); -in -{ - imports = [ - inputs.home-manager.flakeModules.home-manager - ]; - - flake.homeModules = { - default = { - imports = homeModuleFiles ++ [ - inputs.sops-nix.homeManagerModules.sops - inputs.nixcord.homeModules.nixcord - inputs.spicetify-nix.homeManagerModules.spicetify - ]; - }; - }; -} diff --git a/modules/flake/nixos.nix b/modules/flake/nixos.nix deleted file mode 100644 index 40145ea..0000000 --- a/modules/flake/nixos.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ - inputs, - config, - self, - ... -}: - -let - inherit (inputs.nixpkgs) lib; - import-tree = inputs.import-tree.withLib lib; - - # Use import-tree.leafs to get list of NixOS module paths - nixosModuleFiles = import-tree.leafs (self + /modules/nixos); - - # Common NixOS modules for all hosts - commonNixosModules = nixosModuleFiles ++ [ - { - nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - } - ]; - - # Home-manager modules for hosts that use it - homeManagerModules = [ - inputs.home-manager.nixosModules.home-manager - { - home-manager.backupFileExtension = "backup"; - home-manager.extraSpecialArgs = { inherit inputs; }; - home-manager.sharedModules = [ config.flake.homeModules.default ]; - } - ]; -in -{ - flake.nixosConfigurations = { - adam = lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { - inherit inputs; - host = "adam"; - }; - modules = - commonNixosModules - ++ homeManagerModules - ++ [ - (self + /hosts/adam/configuration.nix) - ]; - }; - - sachiel = lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { - inherit inputs; - host = "sachiel"; - }; - modules = commonNixosModules ++ [ - (self + /hosts/sachiel/configuration.nix) - ]; - }; - }; -} diff --git a/modules/flake/systems.nix b/modules/flake/systems.nix deleted file mode 100644 index e66e2e1..0000000 --- a/modules/flake/systems.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: - -{ - # Define systems for perSystem (even if we don't use it much) - systems = [ - "x86_64-linux" - "aarch64-darwin" - ]; -} diff --git a/modules/home/browsers/firefox/default.nix b/modules/home/browsers/firefox/default.nix deleted file mode 100644 index 2cb0656..0000000 --- a/modules/home/browsers/firefox/default.nix +++ /dev/null @@ -1,273 +0,0 @@ -{ - pkgs, - inputs, - config, - lib, - ... -}: -let - - cfg = config.nx.browsers.firefox; - inherit (lib) - mkEnableOption - mkOption - types - mkIf - optionalString - optionalAttrs - ; -in -{ - - options.nx.browsers.firefox = { - enable = mkEnableOption "mozilla firefox"; - blockGoogle = mkOption { - description = "blocks google banner and other"; - type = types.bool; - default = true; - }; - transparent = mkOption { - description = "make firefox transparent"; - type = types.bool; - default = false; - }; - cleanHome = mkOption { - description = "clean up firefox home"; - type = types.bool; - default = true; - }; - hideRecommendations = mkOption { - description = "hide firefox recommendations"; - type = types.bool; - default = true; - }; - disablePasswordManager = mkOption { - description = "disable built-in browser password manager"; - type = types.bool; - default = true; - }; - }; - - config = mkIf cfg.enable { - programs.firefox = { - enable = true; - profiles.default = { - extensions = { - packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [ - ublock-origin - istilldontcareaboutcookies - sponsorblock - decentraleyes - vimium-c - ]; - - force = true; - - settings."uBlock0@raymondhill.net".settings = { - UserMessaging = { - uiTheme = "dark"; - uiAccentCustom = true; - uiAccentCustom0 = "#2C2C2C"; - cloudStorageEnabled = false; - contextMenuEnabled = false; - }; - # Block annoying login with google banner - userFilters = optionalString cfg.blockGoogle '' - ||accounts.google.com/gsi/* - ''; - }; - }; - - search = { - default = "DuckDuckGo"; - engines = { - nix-packages = { - name = "Nix Packages"; - urls = [ - { - template = "https://search.nixos.org/packages"; - params = [ - { - name = "type"; - value = "packages"; - } - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = [ "@np" ]; - }; - - nixos-wiki = { - name = "NixOS Wiki"; - urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ]; - iconMapObj."16" = "https://wiki.nixos.org/favicon.ico"; - definedAliases = [ "@nw" ]; - }; - - bing.metaData.hidden = true; - google.metaData.alias = "@g"; - }; - force = true; - }; - - userChrome = optionalString cfg.transparent '' - /* Hide Back, Forward, Reload, Stop, All Tabs, Firefox View buttons */ - #back-button, - #forward-button, - #reload-button, - #stop-button, - #alltabs-button, - #firefox-view-button { - display: none !important; - } - - .titlebar-buttonbox-container { - display: none; - } - - #tabbrowser-tabs { - border-inline: none !important; - } - - /* Transparent background tabs (above url bar) */ - #navigator-toolbox { - -moz-appearance: -moz-vibrant-titlebar !important; - background: rgba(0, 0, 0, 0.8) !important; - } - - /* Transparent background (behind url bar) */ - #nav-bar { - background: none !important; - box-shadow: none !important; - border-top: 0px !important; - } - - .tab-background[selected="true"] { - background-color: #393e43 !important; - background-image: none !important; - } - - .tab-background { - background-color: var(--background) !important; - color: var(--foreground) !important; - box-shadow: none !important;; - } - - .tab-background[selected] { - background-color: rgba(0, 0, 0, 0.30) !important; - color: var(--foreground) !important; - box-shadow: none !important; - } - - /* Needed for transparency in general */ - :root { - --tabpanel-background-color: transparent !important; - --chrome-content-separator-color: transparent !important; - --toolbar-bgcolor: rgba(0, 0, 0, 0.9) !important; - --newtab-background-color: rgba(0, 0, 0, 0.9) !important; - --newtab-background-color-secondary: transparent !important; - --toolbar-field-background-color: rgba(120, 120, 120, 0.10) !important; - } - ''; - userContent = optionalString cfg.transparent '' - @-moz-document url-prefix("about:"), url("about:home") { - /* Transparent about:settings about:config about:policies */ - :root { - background: rgba(0, 0, 0, 0.0) !important; - } - } - - /* Transparent about:home */ - * { - --newtab-background-color: transparent !important; - --newtab-background-color-secondary: transparent !important; - } - - /* Transparent elements in about:* */ - * { - --in-content-page-background: transparent !important; - --background-color-box: rgba(0, 0, 0, 0.5) !important; - } - ''; - }; - - policies = { - DisableTelemetry = true; - DisableFirefoxStudies = true; - PasswordManagerEnabled = !cfg.disablePasswordManager; - OfferToSaveLogins = !cfg.disablePasswordManager; - DisplayBookmarksToolbar = "never"; - NoDefaultBookmarks = true; - - Homepage = optionalAttrs cfg.cleanHome { - URL = "about:blank"; - Locked = true; - StartPage = "homepage"; - }; - - NewTabPage = !cfg.cleanHome; - - PictureInPicture = { - Enabled = false; - }; - - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - }; - - EncryptedMediaExtensions = { - Enabled = true; - Locked = true; - }; - - FirefoxHome = { - Search = true; - TopSites = true; - SponsoredTopSites = !cfg.cleanHome; - Highlights = true; - Pocket = !cfg.cleanHome; - SponsoredPocket = !cfg.cleanHome; - Locked = true; - }; - - UserMessaging = { - ExtensionRecommendations = !cfg.hideRecommendations; - FeatureRecommendations = !cfg.hideRecommendations; - Locked = true; - MoreFromMozilla = !cfg.hideRecommendations; - SkipOnboarding = true; - UrlbarInterventions = !cfg.hideRecommendations; - }; - - Preferences = { - # Disable fullscreen notification - "full-screen-api.warning.timeout" = "0"; - - # Disable annoying translation popup - "browser.translations.automaticallyPopup" = false; - - # Enable all extensions automatically - "extensions.autoDisableScopes" = 0; - - # Hide ctr-tab tab preview menu - "browser.ctrlTab.sortByRecentlyUsed" = false; - } - // optionalAttrs cfg.transparent { - # transparency - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; - "browser.tabs.allow_transparent_browser" = true; - "gfx.webrender.all" = true; - }; - }; - }; - }; -} diff --git a/modules/home/cli/opencode/default.nix b/modules/home/cli/opencode/default.nix deleted file mode 100644 index 48be861..0000000 --- a/modules/home/cli/opencode/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.nx.cli.opencode; - inherit (lib) mkEnableOption mkIf; -in -{ - - options.nx.cli.opencode = { - enable = mkEnableOption "opencode open source ai coding agent"; - }; - - config = mkIf cfg.enable { - programs.opencode = { - enable = true; - settings = { - theme = "system"; - share = "disabled"; - autoupdate = false; - }; - }; - }; -} diff --git a/modules/home/cli/tmux/default.nix b/modules/home/cli/tmux/default.nix deleted file mode 100644 index 989851c..0000000 --- a/modules/home/cli/tmux/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.cli.tmux; - -in -{ - options.nx.cli.tmux = { - enable = mkEnableOption "tmux"; - }; - config = mkIf cfg.enable { - programs.tmux = { - enable = true; - keyMode = "vi"; - secureSocket = true; - terminal = "xterm-256color"; - extraConfig = '' - unbind C-b - set-option -g prefix C-a - bind-key C-a send-prefix - bind -n M-Left select-pane -L - bind -n M-Right select-pane -R - bind -n M-Up select-pane -U - bind -n M-Down select-pane -D - - # style - set -g status-position top - set -g status-justify absolute-centre - set -g status-style 'fg=color7 bg=default' - set -g status-right "" - # set -g status-right ' #(cd #{pane_current_path}; git rev-parse --abbrev-ref HEAD)' - # set -g status-right "" - set -g status-left '#S' - set -g status-left-style 'fg=color8' - set -g status-right-length 0 - set -g status-left-length 100 - setw -g window-status-current-style 'fg=colour6 bg=default bold' - setw -g window-status-current-format '#I:#W ' - setw -g window-status-style 'fg=color8' - - set -g mouse on - ''; - }; - }; -} diff --git a/modules/home/editors/neovim/default.nix b/modules/home/editors/neovim/default.nix deleted file mode 100644 index ef97f89..0000000 --- a/modules/home/editors/neovim/default.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -let - inherit (lib) mkEnableOption mkIf optionals; - cfg = config.nx.editors.neovim; -in -{ - options.nx.editors.neovim = { - enable = mkEnableOption "Neovim editor"; - }; - - config = mkIf cfg.enable { - programs.neovim = { - defaultEditor = true; - enable = true; - package = pkgs.neovim-unwrapped; - extraPackages = - with pkgs; - [ - tree-sitter - git - ripgrep - fd - gcc - ] - ++ (optionals true [ pkgs.gopls ]) - ++ (optionals true [ - pkgs.nil - pkgs.nixfmt - ]) - ++ (optionals true [ pkgs.lua-language-server ]) - ++ (optionals true [ pkgs.texlab ]) - ++ (optionals true [ pkgs.tinymist ]); - - plugins = with pkgs.vimPlugins; [ - gruvbox-nvim - mini-starter - gitsigns-nvim - nvim-autopairs - telescope-nvim - fidget-nvim - plenary-nvim - nvim-treesitter.withAllGrammars - nvim-lspconfig - nvim-cmp - cmp-nvim-lsp - cmp-buffer - cmp-path - cmp-cmdline - luasnip - cmp_luasnip - lspkind-nvim - ]; - - extraConfig = '' - luafile ${./init.lua} - ''; - }; - }; -} diff --git a/modules/home/editors/vscode/default.nix b/modules/home/editors/vscode/default.nix deleted file mode 100644 index 9762d92..0000000 --- a/modules/home/editors/vscode/default.nix +++ /dev/null @@ -1,139 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -let - inherit (lib) - mkEnableOption - mkOption - types - mkIf - optionals - ; - cfg = config.nx.editors.vscode; -in -{ - options.nx.editors.vscode = { - enable = mkEnableOption "vscode editor"; - - useVSCodium = mkOption { - description = "Use vscodium instead of vscode"; - type = types.bool; - default = false; - }; - - theme = mkOption { - description = "Theme to use for vscode"; - type = types.enum [ - "minimal" - "dark" - "light" - ]; - default = "minimal"; - }; - - langs = { - cmake = mkOption { - description = "enable cmake integration"; - type = types.bool; - default = false; - }; - docker = mkOption { - description = "enable docker integration"; - type = types.bool; - default = false; - }; - python = mkOption { - description = "enable python integration"; - type = types.bool; - default = false; - }; - go = mkOption { - description = "enable go integration"; - type = types.bool; - default = false; - }; - rust = mkOption { - description = "enable rust integration"; - type = types.bool; - default = false; - }; - java = mkOption { - description = "enable java integration"; - type = types.bool; - default = false; - }; - lua = mkOption { - description = "enable lua integration"; - type = types.bool; - default = false; - }; - tailwindcss = mkOption { - description = "enable tailwindcss integration"; - type = types.bool; - default = false; - }; - }; - }; - - config = mkIf cfg.enable { - programs.vscode = { - enable = true; - package = if cfg.useVSCodium then pkgs.vscodium else pkgs.vscode; - mutableExtensionsDir = false; - profiles.default = { - enableUpdateCheck = true; - enableExtensionUpdateCheck = true; - - userSettings = { - "update.mode" = "none"; - "workbench.colorTheme" = - if cfg.theme == "minimal" then - "Minimal" - else if cfg.theme == "dark" then - "Default Dark Modern" - else - "Default Light Modern"; - "editor.fontFamily" = "monospace"; - "editor.tabSize" = 2; - "editor.minimap.enabled" = false; - "terminal.integrated.cursorStyle" = "underline"; - "terminal.integrated.cursorStyleInactive" = "underline"; - "terminal.integrated.fontFamily" = "monospace"; - "terminal.integrated.fontSize" = 13; - "git.autofetch" = true; - "window.controlsStyle" = "custom"; - }; - - extensions = - with pkgs.vscode-extensions; - [ - github.copilot - adpyke.codesnap - esbenp.prettier-vscode - ] - ++ (optionals cfg.langs.cmake [ ms-vscode.cmake-tools ]) - ++ (optionals cfg.langs.docker [ ms-azuretools.vscode-docker ]) - ++ (optionals cfg.langs.python [ ms-python.python ]) - ++ (optionals cfg.langs.go [ golang.go ]) - ++ (optionals cfg.langs.rust [ rust-lang.rust-analyzer ]) - ++ (optionals cfg.langs.java [ vscjava.vscode-maven ]) - ++ (optionals cfg.langs.lua [ sumneko.lua ]) - ++ (optionals cfg.langs.tailwindcss [ bradlc.vscode-tailwindcss ]) - ++ (optionals (cfg.theme == "minimal") ( - pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "minimalist-dark"; - publisher = "nichabosh"; - version = "1.0.0"; - sha256 = "sha256-lw+Scfada6DycLdRT2Cz+Fd12JucglIrw3uRd2ZhabQ="; - } - ] - )); - }; - }; - }; -} diff --git a/modules/home/editors/zed/default.nix b/modules/home/editors/zed/default.nix deleted file mode 100644 index 95c3be0..0000000 --- a/modules/home/editors/zed/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - config, - lib, - ... -}: - -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.editors.zed-editor; -in -{ - options.nx.editors.zed-editor = { - enable = mkEnableOption "zed editor"; - }; - - config = mkIf cfg.enable { - programs.zed-editor = { - enable = true; - extensions = [ "nix" ]; - userSettings = { - telemetry = { - metrics = false; - }; - title_bar = { - show_onboarding_banner = false; - show_project_items = false; - show_branch_name = false; - show_user_menu = false; - }; - tab_bar.show = false; - toolbar.quick_actions = false; - status_bar."experimental.show" = false; - project_panel = { - dock = "right"; - default_width = 400; - hide_root = true; - auto_fold_dirs = false; - starts_open = false; - git_status = false; - sticky_scroll = false; - scrollbar.show = "never"; - indent_guides.show = "never"; - }; - outline_panel = { - default_width = 300; - indent_guides.show = "never"; - }; - file_finder.modal_max_width = "large"; - }; - }; - }; -} diff --git a/modules/home/git/default.nix b/modules/home/git/default.nix deleted file mode 100644 index 2d0855e..0000000 --- a/modules/home/git/default.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.nx.programs.git; - inherit (lib) - mkEnableOption - mkOption - mkIf - types - ; -in -{ - options.nx.programs.git = { - enable = mkEnableOption "git"; - - userName = mkOption { - description = "Git username"; - type = types.str; - default = "Leander Scherer"; - }; - - userEmail = mkOption { - description = "Git email"; - type = types.str; - default = "leander@schererleander.de"; - }; - - signKey = mkOption { - description = "Sign key"; - type = types.nullOr types.str; - default = "A3502B180BC1D41A"; - }; - - signFlavor = mkOption { - description = "Sign key flavor"; - type = types.enum [ - "ssh" - "openpgp" - ]; - default = "openpgp"; - }; - }; - - config = mkIf cfg.enable { - programs.git = { - enable = true; - - signing = mkIf (cfg.signKey != null) { - key = cfg.signKey; - signByDefault = true; - }; - - ignores = [ - "*~" - ".DS_Store" - ".direnv" - ".envrc" - ]; - - settings = { - user.name = cfg.userName; - user.email = cfg.userEmail; - help.autocorrect = 20; - alias = { - st = "status"; - co = "checkout"; - br = "branch"; - }; - pull.rebase = true; - gpg.format = cfg.signFlavor; - url."git@github.com:".insteadOf = "https://github.com"; - }; - }; - programs.diff-highlight = { - enable = true; - enableGitIntegration = true; - }; - }; -} diff --git a/modules/home/gpg/default.nix b/modules/home/gpg/default.nix deleted file mode 100644 index af08ae3..0000000 --- a/modules/home/gpg/default.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: - -let - inherit (lib) - mkOption - types - mkIf - ; - cfg = config.nx.programs.gpg; -in -{ - - options.nx.programs.gpg = { - enable = mkOption { - description = "GNU Privacy Guard"; - type = types.bool; - default = config.nx.programs.git.enable; - }; - - gpgKey = mkOption { - description = "default gpg key"; - type = types.nullOr types.str; - default = ""; - }; - - pinentry = mkOption { - description = "pinentry flavor"; - type = types.enum [ - "curses" - "gnome3" - "qt" - "mac" - ]; - default = if pkgs.stdenv.isDarwin then "mac" else "curses"; - }; - }; - - config = lib.mkIf cfg.enable { - programs.gpg = { - enable = true; - #settings.default-key = mkIf (cfg.gpgKey != null) cfg.gpgKey; - }; - - services.gpg-agent = { - enable = true; - pinentry.package = - if cfg.pinentry == "gnome3" then - pkgs.pinentry-gnome3 - else if cfg.pinentry == "qt" then - pkgs.pinentry-qt - else if cfg.pinentry == "mac" then - pkgs.pinentry_mac - else - pkgs.pinentry-curses; - }; - }; -} diff --git a/modules/home/media/jellyfin-mpv-shim/default.nix b/modules/home/media/jellyfin-mpv-shim/default.nix deleted file mode 100644 index 6594a70..0000000 --- a/modules/home/media/jellyfin-mpv-shim/default.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ config, lib, ... }: -let - cfg = config.nx.media.jellyfin-mpv-shim; - inherit (lib) mkEnableOption mkIf optionalAttrs; -in -{ - options.nx.media.jellyfin-mpv-shim = { - enable = mkEnableOption "Jellyfin MPV Shim"; - }; - - config = mkIf cfg.enable { - systemd.user.services.jellyfin-mpv-shim.Service.Environment = [ - "ENABLE_HDR_WSI=1" - ]; - - services.jellyfin-mpv-shim = { - enable = true; - settings = { - player_name = "mpv-shim"; - allow_transcode_to_h256 = true; - }; - mpvConfig = { - vo = "gpu-next"; - gpu-api = "vulkan"; - target-colorspace-hint = "yes"; - target-peak = 500; - } - // (optionalAttrs false { - target-trc = "pq"; - target-prim = "bt.2020"; - #target-peak = 406; - #tone-mapping = "spline"; - #tone-mapping-mode = "rgb"; - inverse-tone-mapping = "yes"; - }); - }; - }; -} diff --git a/modules/home/media/mpv/default.nix b/modules/home/media/mpv/default.nix deleted file mode 100644 index f6ac360..0000000 --- a/modules/home/media/mpv/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ config, lib, ... }: -let - cfg = config.nx.media.mpv; - inherit (lib) - mkEnableOption - types - optional - mkIf - mkOption - ; -in -{ - options.nx.media.mpv = { - enable = mkEnableOption "a free, open source, and cross-platform media player"; - hdrExpansion = mkEnableOption "SDR to HDR inverse tone mapping"; - targetPeak = mkOption { - description = "Peak brightness of the display"; - type = types.int; - default = 500; # For MO27Q28G - }; - }; - config = mkIf cfg.enable { - programs.mpv = { - enable = true; - config = { - vo = "gpu-next"; - gpu-api = "vulkan"; - target-peak = cfg.targetPeak; - target-colorspace-hint = "yes"; - }; - profiles = { - # Dolby Vision profile - "DOVI" = { - profile-restore = "copy"; - profile-cond = "p[\"video-dec-params/gamma\"] == \"auto\""; - target-trc = "pq"; - target-prim = "bt.2020"; - target-peak = cfg.targetPeak; - tone-mapping-mode = "auto"; - }; - - # SDR look while in HDR - "SDR" = { - profile-restore = "copy"; - target-trc = "pq"; - target-prim = "bt.2020"; - target-peak = 207; - tone-mapping = "bt.2390"; - tone-mapping-mode = "rgb"; - inverse-tone-mapping = "yes"; - }; - - # SDR to HDR inverse tone mapping - "SDR_HDR_EFFECT" = { - profile-restore = "copy"; - target-trc = "pq"; - target-prim = "bt.2020"; - target-peak = 406; - tone-mapping = "spline"; - tone-mapping-mode = "rgb"; - inverse-tone-mapping = "yes"; - }; - }; - defaultProfiles = optional cfg.hdrExpansion "HDR_MODE:SDR_HDR_EFFECT"; - }; - }; -} diff --git a/modules/home/media/nixcord/default.nix b/modules/home/media/nixcord/default.nix deleted file mode 100644 index e2390a3..0000000 --- a/modules/home/media/nixcord/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.nx.media.nixcord; - inherit (lib) mkEnableOption mkIf; -in -{ - options.nx.media.nixcord = { - enable = mkEnableOption "nixcord and setup"; - }; - config = mkIf cfg.enable { - programs.nixcord = { - enable = true; - config = { - themeLinks = [ - "https://refact0r.github.io/system24/theme/system24.theme.css" - ]; - frameless = true; - plugins = { - alwaysAnimate.enable = false; - imageLink.enable = true; - imageZoom.enable = true; - translate.enable = true; - }; - }; - }; - }; -} diff --git a/modules/home/media/spicetify/default.nix b/modules/home/media/spicetify/default.nix deleted file mode 100644 index e72f7f3..0000000 --- a/modules/home/media/spicetify/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - config, - lib, - pkgs, - inputs, - ... -}: - -let - spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; - cfg = config.nx.media.spicetify; - inherit (lib) mkEnableOption mkIf; -in -{ - options.nx.media.spicetify = { - enable = mkEnableOption "Command-line tool to customize the official Spotify client"; - }; - - config = mkIf cfg.enable { - nixpkgs.config.allowUnfree = true; - programs.spicetify = { - enable = true; - enabledSnippets = with spicePkgs.snippets; [ - pointer - sonicDancing - modernScrollbar - nyanCatProgressBar - declutterNowPlayingBar - ]; - - enabledExtensions = with spicePkgs.extensions; [ - keyboardShortcut - ]; - - theme = spicePkgs.themes.sleek; - colorScheme = "Coral"; - }; - }; -} diff --git a/modules/home/productivity/anki/default.nix b/modules/home/productivity/anki/default.nix deleted file mode 100644 index 6a95f83..0000000 --- a/modules/home/productivity/anki/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.nx.productivity.anki; - inherit (lib) mkEnableOption mkIf; -in -{ - options.nx.productivity.anki = { - enable = mkEnableOption "Anki free and open-source flashcard program"; - }; - config = mkIf cfg.enable { - programs.anki = { - enable = true; - #style = "native"; - #addons = with pkgs.ankiAddons; [ - # anki-connect - # review-heatmap - #]; - }; - }; -} diff --git a/modules/home/productivity/latex/default.nix b/modules/home/productivity/latex/default.nix deleted file mode 100644 index 6f37138..0000000 --- a/modules/home/productivity/latex/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - config, - options, - pkgs, - lib, - ... -}: -let - cfg = config.nx.productivity.latex; - inherit (lib) mkEnableOption mkIf; -in -{ - options.nx.productivity.latex = { - enable = mkEnableOption "LaTeX typesetting system"; - }; - - config = mkIf cfg.enable { - programs.texlive = { - enable = true; - # See https://mynixos.com/search?q=texlivepackages.collection for more collections - # and https://mynixos.com/search?q=texlivepackages for more individual packages. - extraPackages = tpkgs: { - inherit (tpkgs) - collection-basic - collection-latex - collection-latexrecommended - biblatex - ; - }; - }; - - home.packages = with pkgs; [ - biber - ]; - - programs.pandoc = { - enable = true; - defaults = { - pdf-engine = "pdfetex"; - }; - }; - }; -} diff --git a/modules/home/shells/bash/default.nix b/modules/home/shells/bash/default.nix deleted file mode 100644 index d224442..0000000 --- a/modules/home/shells/bash/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: - -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.shells.bash; -in -{ - options.nx.shells.bash = { - enable = mkEnableOption "bash shell"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - zoxide - ]; - - programs.bash = { - enable = true; - enableCompletion = true; - initExtra = '' - # view man pages with nvim - export MANPAGER="nvim +Man!" - - # vim keybindings - set -o vi - - # zoxide smarter cd command - eval "$(zoxide init bash)" - ''; - shellAliases = { - ls = "ls --color=auto"; - }; - }; - }; -} diff --git a/modules/home/shells/zsh/default.nix b/modules/home/shells/zsh/default.nix deleted file mode 100644 index 5da67c9..0000000 --- a/modules/home/shells/zsh/default.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: - -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.shells.zsh; -in -{ - options.nx.shells.zsh = { - enable = mkEnableOption "zsh shell"; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - zoxide - ]; - - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - initContent = '' - # view man pages with nvim - export MANPAGER="nvim +Man!" - - # Directory completion with trailing slash - zstyle ':completion:*' list-dirs-first true - zstyle ':completion:*' special-dirs true - zstyle ':completion:*' squeeze-slashes true - zstyle ':completion:*' add-space false - - # Case-insensitive completion - zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' - # vim keybindings - bindkey -v - - # Auto cd - type directory name to cd into it - setopt AUTO_CD - - # Complete .. to ../ for directory navigation - setopt AUTO_PARAM_SLASH - - # zoxide smarter cmd command - eval "$(zoxide init zsh)" - ''; - shellAliases = { - ls = "ls --color=auto"; - }; - - zplug = { - enable = true; - plugins = [ - { name = "mafredri/zsh-async"; } - { - name = "sindresorhus/pure"; - tags = [ - "as:theme" - "use:pure.zsh" - ]; - } - { name = "zdharma-continuum/fast-syntax-highlighting"; } - { name = "zsh-users/zsh-autosuggestions"; } - ]; - }; - }; - }; -} diff --git a/modules/home/terminal/kitty.nix b/modules/home/terminal/kitty.nix deleted file mode 100644 index 35d5648..0000000 --- a/modules/home/terminal/kitty.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - ... -}: - -{ - options.nx.terminal.kitty.enable = lib.mkEnableOption "Enable kitty"; - config = lib.mkIf config.nx.terminal.kitty.enable { - programs.kitty = { - enable = true; - shellIntegration.enableFishIntegration = true; - font = { - name = "monospace"; - size = 11; - }; - settings = { - cursor_shape = "underline"; - cursor_blink_interval = "-1"; - cursor_stop_blinking_after = "15.0"; - - background_opacity = "0.3"; - - enable_audio_bell = false; - bell_on_tab = false; - - window_border_width = "0"; - window_margin_width = "4"; - window_padding_width = "5"; - }; - }; - }; -} diff --git a/modules/home/zathura/default.nix b/modules/home/zathura/default.nix deleted file mode 100644 index 2334fc7..0000000 --- a/modules/home/zathura/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.nx.programs.zathura; - inherit (lib) mkEnableOption mkIf; -in -{ - options.nx.programs.zathura = { - enable = mkEnableOption "zathura document viewer"; - }; - - config = mkIf cfg.enable { - programs.zathura = { - enable = true; - options = { - recolor-lightcolor = "rgba(0, 0, 0, 0)"; - recolor-darkcolor = "rgba(255, 255, 255, 1)"; - recolor = true; - adjust-open = "width"; - guioptions = "none"; - zoom-center = true; - page-padding = 0; - pages-per-row = 1; - scroll-page-aware = true; - }; - - mappings = { - i = "recolor"; - j = "navigate previous"; - k = "navigate next"; - }; - }; - }; -} diff --git a/modules/hosts/adam/configuration.nix b/modules/hosts/adam/configuration.nix new file mode 100644 index 0000000..53094f0 --- /dev/null +++ b/modules/hosts/adam/configuration.nix @@ -0,0 +1,56 @@ +{ + flake.modules.nixos.adam = + { + pkgs, + ... + }: + { + boot = { + kernelPackages = pkgs.linuxPackages_latest; + kernelParams = [ "amd_pstate=active" ]; + initrd.luks.devices."luks-803851e9-7fa8-4367-a927-0bb76d0fe830".device = + "/dev/disk/by-uuid/803851e9-7fa8-4367-a927-0bb76d0fe830"; + loader = { + timeout = 0; + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + }; + + # Localisation + time.timeZone = "Europe/Berlin"; + i18n.defaultLocale = "en_US.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + + # Disable waiting for network to be online + systemd.services.NetworkManager-wait-online.enable = false; + + # User configuration + users.users.schererleander = { + isNormalUser = true; + home = "/home/schererleander"; + shell = pkgs.zsh; + ignoreShellProgramCheck = true; + extraGroups = [ + "wheel" + "networkmanager" + "video" + "input" + ]; + }; + + nixpkgs.config.allowUnfree = true; + nixpkgs.hostPlatform = "x86_64-linux"; + system.stateVersion = "25.11"; + }; +} diff --git a/modules/hosts/adam/flake-parts.nix b/modules/hosts/adam/flake-parts.nix new file mode 100644 index 0000000..cf50170 --- /dev/null +++ b/modules/hosts/adam/flake-parts.nix @@ -0,0 +1,15 @@ +{ inputs, ... }: +{ + flake.nixosConfigurations."adam" = inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; + modules = [ + inputs.self.modules.nixos.adam + inputs.self.modules.nixos.secrets + inputs.self.modules.nixos.home-manager + inputs.self.modules.nixos.plymouth + inputs.self.modules.nixos.kde + inputs.self.modules.nixos.dns + inputs.self.modules.nixos.bluetooth + ]; + }; +} diff --git a/modules/hosts/adam/hardware-configuration.nix b/modules/hosts/adam/hardware-configuration.nix new file mode 100644 index 0000000..be6cc0a --- /dev/null +++ b/modules/hosts/adam/hardware-configuration.nix @@ -0,0 +1,49 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + flake.modules.nixos.adam = + { + config, + lib, + ... + }: + + { + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/mapper/luks-37471d57-a31d-4bf1-b219-9992bafe7b64"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-37471d57-a31d-4bf1-b219-9992bafe7b64".device = + "/dev/disk/by-uuid/37471d57-a31d-4bf1-b219-9992bafe7b64"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/8E50-FCCA"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ + { device = "/dev/mapper/luks-803851e9-7fa8-4367-a927-0bb76d0fe830"; } + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/modules/hosts/lilith/configuration.nix b/modules/hosts/lilith/configuration.nix new file mode 100644 index 0000000..af15fba --- /dev/null +++ b/modules/hosts/lilith/configuration.nix @@ -0,0 +1,64 @@ +{ + flake.modules.darwin.lilith = + { + ... + }: + + let + username = "schererleander"; + in + { + networking.hostName = "lilith"; + + # User configuration + users.users.${username}.home = "/Users/${username}"; + + system.primaryUser = username; + system.defaults = { + dock = { + autohide = true; + largesize = 48; + show-recents = false; + }; + WindowManager.EnableStandardClickToShowDesktop = false; + finder = { + _FXShowPosixPathInTitle = true; + _FXSortFoldersFirst = true; + }; + controlcenter = { + Display = false; + FocusModes = false; + Sound = false; + }; + loginwindow.GuestEnabled = false; + }; + + homebrew = { + enable = true; + brews = [ + "openjdk@21" + ]; + casks = [ + "mullvad-vpn" + "nextcloud" + "iterm2" + "rectangle" + ]; + masApps = { + "AdGuard Mini" = 1440147259; + #"WebSSH - Sysadmin Toolbox" = 497714887; + "Windows App" = 1295203466; + "Goodnotes: KI-Notizen, PDF" = 1444383602; + "WhatsApp Messenger" = 310633997; + }; + onActivation.cleanup = "zap"; + onActivation.autoUpdate = true; + onActivation.upgrade = true; + }; + + nix.enable = false; + + nixpkgs.config.allowUnfree = true; + system.stateVersion = 5; + }; +} diff --git a/modules/hosts/lilith/flake-parts.nix b/modules/hosts/lilith/flake-parts.nix new file mode 100644 index 0000000..5842777 --- /dev/null +++ b/modules/hosts/lilith/flake-parts.nix @@ -0,0 +1,15 @@ +{ + inputs, + ... +}: + +{ + flake.darwinConfigurations.lilith = inputs.nix-darwin.lib.darwinSystem { + specialArgs = { inherit inputs; }; + system = "aarch64-darwin"; + modules = [ + inputs.self.modules.darwin.lilith + inputs.self.modules.darwin.home-manager + ]; + }; +} diff --git a/modules/hosts/sachiel/configuration.nix b/modules/hosts/sachiel/configuration.nix new file mode 100644 index 0000000..d2d1d75 --- /dev/null +++ b/modules/hosts/sachiel/configuration.nix @@ -0,0 +1,49 @@ +{ + flake.modules.nixos.sachiel = + { + pkgs, + ... + }: + { + boot.tmp.cleanOnBoot = true; + boot.loader.grub.configurationLimit = 2; + zramSwap.enable = true; + + swapDevices = [ + { + device = "/var/swapfile"; + size = 4096; + } + ]; + + networking = { + hostName = "sachiel"; + domain = "schererleander.de"; + }; + + users.users.root.hashedPassword = "!"; + users.mutableUsers = false; + users.users.administrator = { + isNormalUser = true; + hashedPassword = "$6$KBblJguEyfEmuWnU$Xf0QqPVacA2qvnzZRpnSE2cmh0kNnMgtVhCrMEDI76buNzuzkuDY6EnO7jPjQlEnoczx6ZPAl2pK.SxezbVa.."; + extraGroups = [ "wheel" ]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPvlkqlvY4+0o7UIGnFnnRw0HeBq5v7wYJ3kY3teXxxl vps" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINL+r0l2i07pl9V9iiGqw5e2f/QAcrMhuraA25HavdNT github-deploy" + ]; + }; + + environment.systemPackages = with pkgs; [ + git + gnutar + gzip + zoxide + neovim + htop + ]; + + nixpkgs.config.allowUnfree = true; + nixpkgs.hostPlatform = "x86_64-linux"; + system.stateVersion = "25.05"; + }; +} diff --git a/modules/hosts/sachiel/flake-parts.nix b/modules/hosts/sachiel/flake-parts.nix new file mode 100644 index 0000000..42d7551 --- /dev/null +++ b/modules/hosts/sachiel/flake-parts.nix @@ -0,0 +1,14 @@ +{ inputs, ... }: +{ + flake.nixosConfigurations."sachiel" = inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; + modules = [ + inputs.self.modules.nixos.sachiel + inputs.self.modules.nixos.secrets + inputs.self.modules.nixos.openssh + inputs.self.modules.nixos.nginx + inputs.self.modules.nixos.nextcloud + inputs.self.modules.nixos.site + ]; + }; +} diff --git a/modules/hosts/sachiel/hardware-configuration.nix b/modules/hosts/sachiel/hardware-configuration.nix new file mode 100644 index 0000000..e188fae --- /dev/null +++ b/modules/hosts/sachiel/hardware-configuration.nix @@ -0,0 +1,39 @@ +{ + flake.modules.nixos.sachiel = + { ... }: + { + boot.loader.grub = { + efiSupport = true; + efiInstallAsRemovable = true; + device = "nodev"; + }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/4E07-7ABB"; + fsType = "vfat"; + }; + boot.initrd.availableKernelModules = [ + "ata_piix" + "uhci_hcd" + "xen_blkfront" + "vmw_pvscsi" + "virtio_net" + "virtio_pci" + "virtio_mmio" + "virtio_blk" + "virtio_scsi" + "9p" + "9pnet_virtio" + ]; + boot.initrd.kernelModules = [ + "nvme" + "virtio_balloon" + "virtio_console" + "virtio_rng" + "virtio_gpu" + ]; + fileSystems."/" = { + device = "/dev/vda1"; + fsType = "ext4"; + }; + }; +} diff --git a/modules/nixos/desktop/cinnamon/default.nix b/modules/nixos/desktop/cinnamon/default.nix deleted file mode 100644 index f86434b..0000000 --- a/modules/nixos/desktop/cinnamon/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf mkForce; - cfg = config.nx.desktop.cinnamon; -in -{ - options.nx.desktop.cinnamon.enable = mkEnableOption "Cinnamon desktop"; - - config = mkIf cfg.enable { - services.xserver = { - enable = true; - displayManager.lightdm.enable = true; - desktopManager.cinnamon.enable = true; - }; - services.speechd.enable = mkForce false; - services.orca.enable = mkForce false; - environment.systemPackages = [ pkgs.nemo-preview ]; - }; -} diff --git a/modules/nixos/desktop/gnome/default.nix b/modules/nixos/desktop/gnome/default.nix deleted file mode 100644 index 3be22d5..0000000 --- a/modules/nixos/desktop/gnome/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.desktop.gnome; -in -{ - options.nx.desktop.gnome.enable = mkEnableOption "GNOME desktop"; - - config = mkIf cfg.enable { - services.displayManager.gdm.enable = true; - services.desktopManager.gnome.enable = true; - services.gnome.core-developer-tools.enable = false; - services.gnome.games.enable = false; - - environment.gnome.excludePackages = with pkgs; [ - gnome-tour - gnome-user-docs - epiphany - ]; - environment.systemPackages = with pkgs; [ - gnomeExtensions.pop-shell - gnomeExtensions.blur-my-shell - gnome-tweaks - ]; - }; -} diff --git a/modules/nixos/desktop/kde/default.nix b/modules/nixos/desktop/kde/default.nix deleted file mode 100644 index c267d19..0000000 --- a/modules/nixos/desktop/kde/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.desktop.kde; -in -{ - options.nx.desktop.kde.enable = mkEnableOption "KDE Plasma 6 desktop"; - - config = mkIf cfg.enable { - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - }; - services.desktopManager.plasma6.enable = true; - security.pam.services.sddm.enableKwallet = true; - environment.plasma6.excludePackages = with pkgs.kdePackages; [ - elisa - kate - ]; - environment.systemPackages = with pkgs.kdePackages; [ kcalc ]; - }; -} diff --git a/modules/nixos/dns/default.nix b/modules/nixos/dns/default.nix deleted file mode 100644 index 0cc1766..0000000 --- a/modules/nixos/dns/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ config, lib, ... }: -let - inherit (lib) - mkEnableOption - mkOption - types - mkIf - concatStringsSep - ; - cfg = config.nx.dns; -in -{ - options.nx.dns = { - enable = mkEnableOption "DNS-over-TLS via systemd-resolved"; - servers = mkOption { - type = types.listOf types.str; - default = [ - "1.1.1.1#cloudflare-dns.com" - "1.0.0.1#cloudflare-dns.com" - "9.9.9.9#dns.quad9.net" - "149.112.112.112#dns.quad9.net" - ]; - }; - fallbackServers = mkOption { - type = types.listOf types.str; - default = [ - "8.8.8.8#dns.google" - "8.8.4.4#dns.google" - ]; - }; - }; - - config = mkIf cfg.enable { - services.resolved = { - enable = true; - settings = { - Resolve = { - DNS = cfg.servers; - FallbackDNS = cfg.fallbackServers; - DNSSEC = true; - DNSOverTLS = true; - Domains = [ "~." ]; - }; - }; - }; - networking = { - nameservers = cfg.servers; - networkmanager.dns = lib.mkDefault "systemd-resolved"; - }; - systemd.services.systemd-resolved.environment = { - DNS = concatStringsSep " " cfg.servers; - FallbackDNS = concatStringsSep " " cfg.fallbackServers; - }; - }; - -} diff --git a/modules/nixos/hardware/printer/default.nix b/modules/nixos/hardware/printer/default.nix deleted file mode 100644 index 09b6da4..0000000 --- a/modules/nixos/hardware/printer/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.hardware.printer; -in -{ - options.nx.hardware.printer.enable = mkEnableOption "printer support"; - - config = mkIf cfg.enable { - services.printing = { - enable = true; - drivers = [ pkgs.brlaser ]; - }; - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - }; -} diff --git a/modules/nixos/hardware/wooting/default.nix b/modules/nixos/hardware/wooting/default.nix deleted file mode 100644 index 7f6e3c6..0000000 --- a/modules/nixos/hardware/wooting/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.hardware.wooting; -in -{ - options.nx.hardware.wooting.enable = mkEnableOption "Wooting keyboard support"; - - config = mkIf cfg.enable { - services.udev.packages = [ pkgs.wooting-udev-rules ]; - environment.systemPackages = [ pkgs.wootility ]; - }; -} diff --git a/modules/nixos/mullvad-vpn/default.nix b/modules/nixos/mullvad-vpn/default.nix deleted file mode 100644 index 0c12d17..0000000 --- a/modules/nixos/mullvad-vpn/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.mullvad-vpn; -in -{ - options.nx.mullvad-vpn.enable = mkEnableOption "Mullvad VPN"; - - config = mkIf cfg.enable { - services.mullvad-vpn.enable = true; - environment.systemPackages = [ pkgs.mullvad-vpn ]; - }; -} diff --git a/modules/nixos/openssh/default.nix b/modules/nixos/openssh/default.nix deleted file mode 100644 index a37dfec..0000000 --- a/modules/nixos/openssh/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, ... }: -let - inherit (lib) - mkEnableOption - mkOption - types - mkIf - ; - cfg = config.nx.services.openssh; -in -{ - options.nx.services.openssh = { - enable = mkEnableOption "OpenSSH server"; - allowedUsers = mkOption { - type = types.listOf types.str; - default = [ ]; - }; - }; - - config = mkIf cfg.enable { - services.openssh = { - enable = true; - settings.AllowUsers = cfg.allowedUsers; - }; - }; -} diff --git a/modules/nixos/plymouth/default.nix b/modules/nixos/plymouth/default.nix deleted file mode 100644 index dd8d79a..0000000 --- a/modules/nixos/plymouth/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.plymouth; -in -{ - options.nx.plymouth.enable = mkEnableOption "Plymouth"; - - config = mkIf cfg.enable { - boot = { - # Show password prompt for encrypted root - initrd.systemd.enable = true; - kernelParams = [ "quiet" ]; - loader.systemd-boot.consoleMode = "max"; - plymouth = { - enable = true; - theme = "loader_2"; - themePackages = with pkgs; [ - (adi1090x-plymouth-themes.override { - selected_themes = [ - #"lone" - #"red_loader" - #"cuts_alt" - #"abstract_ring_alt" - "loader_2" - #"sliced" - #"spinner_alt" - #"sphere" - #"loader" - ]; - }) - ]; - }; - }; - }; -} diff --git a/modules/nixos/server/nextcloud/default.nix b/modules/nixos/server/nextcloud/default.nix deleted file mode 100644 index ccaad46..0000000 --- a/modules/nixos/server/nextcloud/default.nix +++ /dev/null @@ -1,138 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.server.nextcloud; -in -{ - options.nx.server.nextcloud = { - enable = mkEnableOption "Nextcloud server"; - }; - - config = mkIf cfg.enable { - services.nextcloud = { - enable = true; - package = pkgs.nextcloud32; - hostName = "cloud.schererleander.de"; - https = true; - database.createLocally = true; - maxUploadSize = "16G"; - config = { - dbtype = "mysql"; - adminuser = "schererleander"; - adminpassFile = config.sops.secrets."nextcloud-admin-pass".path; - }; - secrets = { - secret = config.sops.secrets."nextcloud-secret".path; - }; - settings = { - maintenance_window_start = 2; # 02:00 - default_phone_region = "de"; - overwriteProtocol = "https"; - trusted_domains = [ "cloud.schererleander.de" ]; - logtimezone = config.time.timeZone; - log_type = "file"; - # Disable mail functionality for single-user instance - mail_smtpmode = "null"; - }; - phpOptions."opcache.interned_strings_buffer" = "64"; - }; - - services.nginx.virtualHosts = { - "cloud.schererleander.de" = { - forceSSL = true; - sslCertificate = config.sops.secrets."cert_fullchain".path; - sslCertificateKey = config.sops.secrets."cert_private".path; - }; - }; - - services.borgbackup.jobs.nextcloud = { - paths = [ - "/var/lib/nextcloud" - "/var/lib/backup/nextcloud/db" - ]; - repo = "$BORG_REPO"; - encryption.mode = "none"; - user = "root"; - group = "root"; - environment = { - BORG_RSH = "ssh -i ${ - config.sops.secrets."borgbase_ssh_key".path - } -o StrictHostKeyChecking=accept-new"; - TMPDIR = "/var/tmp"; - }; - compression = "auto,lzma"; - startAt = "daily"; - readWritePaths = [ - "/var/lib/backup" - "/var/lib/nextcloud" - ]; - preHook = '' - set -euo pipefail - - export BORG_REPO="$(cat ${config.sops.secrets."borg_repo".path})" - - INSTALL="${pkgs.coreutils}/bin/install" - FIND="${pkgs.findutils}/bin/find" - MYSQLDUMP="${pkgs.mariadb.client}/bin/mariadb-dump" - GZIP="${pkgs.gzip}/bin/gzip" - OCC="${lib.getExe config.services.nextcloud.occ}" - - # This command requires write access to /var/lib/backup. - $INSTALL -d -m 0750 -o root -g root /var/lib/backup/nextcloud/db - - trap "$OCC maintenance:mode --off >/dev/null 2>&1 || true" EXIT - - $OCC maintenance:mode --on - - # Make a consistent database dump without locking the site. - $MYSQLDUMP --single-transaction --quick --lock-tables=false --databases nextcloud \ - | $GZIP -c > /var/lib/backup/nextcloud/db/nextcloud-$(date +%F-%H%M%S).sql.gz - - # Delete local dump files older than 14 days. - $FIND /var/lib/backup/nextcloud/db -type f -name "*.sql.gz" -mtime +14 -delete || true - ''; - postHook = '' - set -euo pipefail - ${lib.getExe config.services.nextcloud.occ} maintenance:mode --off || true - ''; - }; - - services.fail2ban = { - enable = true; - bantime = lib.mkDefault "1h"; - jails = { - nextcloud = { - enabled = true; - settings = { - backend = "systemd"; - journalmatch = "SYSLOG_IDENTIFIER=Nextcloud"; - # END modification to work with syslog instead of logile - port = 443; - protocol = "tcp"; - filter = "nextcloud"; - maxretry = 3; - findtime = 43200; - }; - }; - }; - }; - - environment.etc = { - # Adapted failregex for syslogs - "fail2ban/filter.d/nextcloud.local".text = pkgs.lib.mkDefault ( - pkgs.lib.mkAfter '' - [Definition] - _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) - failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: - ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error. - datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?" - '' - ); - }; - }; -} diff --git a/modules/nixos/server/nginx/default.nix b/modules/nixos/server/nginx/default.nix deleted file mode 100644 index d960d33..0000000 --- a/modules/nixos/server/nginx/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - lib, - ... -}: -let - inherit (lib) - mkEnableOption - mkIf - ; - cfg = config.nx.server.nginx; -in -{ - options.nx.server.nginx = { - enable = mkEnableOption "nginx reverse proxy" // { - default = true; - }; - }; - config = mkIf cfg.enable { - services.nginx = { - enable = true; - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; - appendHttpConfig = '' - map $scheme $hsts_header { - https "max-age=31536000; includeSubdomains; preload"; - } - add_header Strict-Transport-Security $hsts_header; - #add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self';" always; - add_header 'Referrer-Policy' 'same-origin'; - add_header X-Frame-Options DENY; - add_header X-Content-Type-Options nosniff; - ''; - }; - networking.firewall.allowedTCPPorts = [ - 80 - 443 - ]; - }; -} diff --git a/modules/nixos/server/openssh/default.nix b/modules/nixos/server/openssh/default.nix deleted file mode 100644 index 0972e66..0000000 --- a/modules/nixos/server/openssh/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - config, - lib, - ... -}: - -let - inherit (lib) mkEnableOption mkIf mkDefault; - cfg = config.nx.server.openssh; -in -{ - options.nx.server.openssh = { - enable = mkEnableOption "OpenSSH server"; - }; - - config = mkIf cfg.enable { - services.openssh = { - enable = true; - ports = [ 8693 ]; - settings = { - PasswordAuthentication = false; - X11Forwarding = false; - PermitRootLogin = "yes"; - }; - }; - networking.firewall.allowedTCPPorts = [ 8693 ]; - - services.fail2ban = { - enable = true; - bantime = lib.mkDefault "1h"; - jails = { - sshd = { - enabled = true; - settings = { - port = 8693; - backend = "systemd"; - maxretry = 4; - findtime = "10m"; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/server/site/default.nix b/modules/nixos/server/site/default.nix deleted file mode 100644 index c1d472b..0000000 --- a/modules/nixos/server/site/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - config, - lib, - inputs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.server.site; -in -{ - imports = [ - inputs.site.nixosModules.default - ]; - - options.nx.server.site = { - enable = mkEnableOption "personal website"; - }; - - config = mkIf cfg.enable { - services.site = { - enable = true; - domain = "schererleander.de"; - sslCertificate = config.sops.secrets."cert_fullchain".path; - sslCertificateKey = config.sops.secrets."cert_private".path; - }; - }; -} diff --git a/modules/nixos/steam/default.nix b/modules/nixos/steam/default.nix deleted file mode 100644 index d708139..0000000 --- a/modules/nixos/steam/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.steam; -in -{ - options.nx.steam = { - enable = mkEnableOption "Steam gaming platform"; - protontricks = mkEnableOption "protontricks" // { - default = true; - }; - gamescope = mkEnableOption "gamescope session compositor"; - }; - - config = mkIf cfg.enable { - programs.steam = { - enable = true; - protontricks.enable = cfg.protontricks; - gamescopeSession.enable = cfg.gamescope; - extraCompatPackages = [ pkgs.proton-ge-bin ]; - }; - }; -} diff --git a/modules/nixos/sunshine/default.nix b/modules/nixos/sunshine/default.nix deleted file mode 100644 index 23a4cc0..0000000 --- a/modules/nixos/sunshine/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - config, - lib, - ... -}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.sunshine; -in -{ - options.nx.sunshine.enable = mkEnableOption "Sunshine game streaming server"; - - config = mkIf cfg.enable { - services.sunshine = { - enable = true; - autoStart = true; - capSysAdmin = true; - openFirewall = true; - }; - hardware.graphics.enable = true; - }; -} diff --git a/modules/programs/anki.nix b/modules/programs/anki.nix new file mode 100644 index 0000000..ca0cd0f --- /dev/null +++ b/modules/programs/anki.nix @@ -0,0 +1,14 @@ +{ + flake.modules.homeManager.anki = + { ... }: + { + programs.anki = { + enable = true; + #style = "native"; + #addons = with pkgs.ankiAddons; [ + # anki-connect + # review-heatmap + #]; + }; + }; +} diff --git a/modules/programs/bash.nix b/modules/programs/bash.nix new file mode 100644 index 0000000..6fd488d --- /dev/null +++ b/modules/programs/bash.nix @@ -0,0 +1,30 @@ +{ + flake.modules.homeManager.bash = + { + pkgs, + ... + }: + { + home.packages = with pkgs; [ + zoxide + ]; + + programs.bash = { + enable = true; + enableCompletion = true; + initExtra = '' + # view man pages with nvim + export MANPAGER="nvim +Man!" + + # vim keybindings + set -o vi + + # zoxide smarter cd command + eval "$(zoxide init bash)" + ''; + shellAliases = { + ls = "ls --color=auto"; + }; + }; + }; +} diff --git a/modules/programs/firefox.nix b/modules/programs/firefox.nix new file mode 100644 index 0000000..bf89c29 --- /dev/null +++ b/modules/programs/firefox.nix @@ -0,0 +1,140 @@ +{ + flake.modules.nixos.firefox = + { pkgs, ... }: + { + programs.firefox = { + enable = true; + package = pkgs.firefox; + }; + }; + + flake.modules.homeManager.firefox = + { + pkgs, + inputs, + ... + }: + { + programs.firefox = { + enable = true; + profiles.default = { + extensions = { + packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [ + ublock-origin + istilldontcareaboutcookies + ]; + + force = true; + settings."uBlock0@raymondhill.net".settings = { + UserMessaging = { + cloudStorageEnabled = false; + contextMenuEnabled = false; + }; + # Block annoying login with google banner + userFilters = '' + ||accounts.google.com/gsi/* + ''; + }; + }; + + search = { + default = "DuckDuckGo"; + engines = { + nix-packages = { + name = "Nix Packages"; + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + + nixos-wiki = { + name = "NixOS Wiki"; + urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ]; + iconMapObj."16" = "https://wiki.nixos.org/favicon.ico"; + definedAliases = [ "@nw" ]; + }; + + bing.metaData.hidden = true; + google.metaData.alias = "@g"; + }; + force = true; + }; + + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + PasswordManagerEnabled = false; + OfferToSaveLogins = false; + DisplayBookmarksToolbar = "never"; + NoDefaultBookmarks = true; + + Homepage = { + URL = "about:blank"; + Locked = true; + StartPage = "homepage"; + }; + + NewTabPage = false; + + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + + EncryptedMediaExtensions = { + Enabled = true; + Locked = true; + }; + + FirefoxHome = { + Search = true; + TopSites = true; + SponsoredTopSites = false; + Highlights = true; + Locked = true; + }; + + UserMessaging = { + ExtensionRecommendations = false; + FeatureRecommendations = false; + Locked = true; + MoreFromMozilla = false; + SkipOnboarding = true; + UrlbarInterventions = false; + }; + + Preferences = { + # Disable fullscreen notification + "full-screen-api.warning.timeout" = "0"; + + # Disable annoying translation popup + "browser.translations.automaticallyPopup" = false; + + # Enable all extensions automatically + "extensions.autoDisableScopes" = 0; + + # Hide ctr-tab tab preview menu + "browser.ctrlTab.sortByRecentlyUsed" = false; + }; + }; + }; + }; + }; +} diff --git a/modules/programs/git.nix b/modules/programs/git.nix new file mode 100644 index 0000000..a8a2e88 --- /dev/null +++ b/modules/programs/git.nix @@ -0,0 +1,48 @@ +{ + flake.modules.nixos.git = + { pkgs, ... }: + { + programs.git = { + enable = true; + package = pkgs.git; + }; + }; + + flake.modules.homeManager.git = + { ... }: + { + programs.git = { + enable = true; + + signing = { + key = "A3502B180BC1D41A"; + signByDefault = true; + }; + + ignores = [ + "*~" + ".DS_Store" + ".direnv" + ".envrc" + ]; + + settings = { + user.name = "Leander Scherer"; + user.email = "leander@schererleander.de"; + help.autocorrect = 20; + alias = { + st = "status"; + co = "checkout"; + br = "branch"; + }; + pull.rebase = true; + gpg.format = "openpgp"; + url."git@github.com:".insteadOf = "https://github.com"; + }; + }; + programs.diff-highlight = { + enable = true; + enableGitIntegration = true; + }; + }; +} diff --git a/modules/programs/jellyfin-mpv-shim.nix b/modules/programs/jellyfin-mpv-shim.nix new file mode 100644 index 0000000..1844296 --- /dev/null +++ b/modules/programs/jellyfin-mpv-shim.nix @@ -0,0 +1,37 @@ +{ + flake.modules.homeManager.jellyfin-mpv-shim = + { + lib, + ... + }: + let + inherit (lib) optionalAttrs; + in + { + systemd.user.services.jellyfin-mpv-shim.Service.Environment = [ + "ENABLE_HDR_WSI=1" + ]; + + services.jellyfin-mpv-shim = { + enable = true; + settings = { + player_name = "mpv-shim"; + allow_transcode_to_h256 = true; + }; + mpvConfig = { + vo = "gpu-next"; + gpu-api = "vulkan"; + target-colorspace-hint = "yes"; + target-peak = 500; + } + // (optionalAttrs false { + target-trc = "pq"; + target-prim = "bt.2020"; + #target-peak = 406; + #tone-mapping = "spline"; + #tone-mapping-mode = "rgb"; + inverse-tone-mapping = "yes"; + }); + }; + }; +} diff --git a/modules/programs/latex.nix b/modules/programs/latex.nix new file mode 100644 index 0000000..24654c3 --- /dev/null +++ b/modules/programs/latex.nix @@ -0,0 +1,33 @@ +{ + flake.modules.homeManager.latex = + { + pkgs, + ... + }: + { + programs.texlive = { + enable = true; + # See https://mynixos.com/search?q=texlivepackages.collection for more collections + # and https://mynixos.com/search?q=texlivepackages for more individual packages. + extraPackages = tpkgs: { + inherit (tpkgs) + collection-basic + collection-latex + collection-latexrecommended + biblatex + ; + }; + }; + + home.packages = with pkgs; [ + biber + ]; + + programs.pandoc = { + enable = true; + defaults = { + pdf-engine = "pdfetex"; + }; + }; + }; +} diff --git a/modules/programs/mpv.nix b/modules/programs/mpv.nix new file mode 100644 index 0000000..8787bbd --- /dev/null +++ b/modules/programs/mpv.nix @@ -0,0 +1,48 @@ +{ + flake.modules.homeManager.mpv = + { ... }: + { + programs.mpv = { + enable = true; + config = { + vo = "gpu-next"; + gpu-api = "vulkan"; + target-peak = 500; + target-colorspace-hint = "yes"; + }; + profiles = { + # Dolby Vision profile + "DOVI" = { + profile-restore = "copy"; + profile-cond = "p[\"video-dec-params/gamma\"] == \"auto\""; + target-trc = "pq"; + target-prim = "bt.2020"; + target-peak = 500; + tone-mapping-mode = "auto"; + }; + + # SDR look while in HDR + "SDR" = { + profile-restore = "copy"; + target-trc = "pq"; + target-prim = "bt.2020"; + target-peak = 207; + tone-mapping = "bt.2390"; + tone-mapping-mode = "rgb"; + inverse-tone-mapping = "yes"; + }; + + # SDR to HDR inverse tone mapping + "SDR_HDR_EFFECT" = { + profile-restore = "copy"; + target-trc = "pq"; + target-prim = "bt.2020"; + target-peak = 406; + tone-mapping = "spline"; + tone-mapping-mode = "rgb"; + inverse-tone-mapping = "yes"; + }; + }; + }; + }; +} diff --git a/modules/programs/neovim/default.nix b/modules/programs/neovim/default.nix new file mode 100644 index 0000000..e61f01b --- /dev/null +++ b/modules/programs/neovim/default.nix @@ -0,0 +1,48 @@ +{ + flake.modules.homeManager.neovim = + { pkgs, ... }: + { + programs.neovim = { + defaultEditor = true; + enable = true; + package = pkgs.neovim-unwrapped; + extraPackages = with pkgs; [ + tree-sitter + git + ripgrep + fd + gcc + gopls + nil + nixfmt + lua-language-server + texlab + tinymist + ]; + + plugins = with pkgs.vimPlugins; [ + gruvbox-nvim + mini-starter + gitsigns-nvim + nvim-autopairs + telescope-nvim + fidget-nvim + plenary-nvim + nvim-treesitter.withAllGrammars + nvim-lspconfig + nvim-cmp + cmp-nvim-lsp + cmp-buffer + cmp-path + cmp-cmdline + luasnip + cmp_luasnip + lspkind-nvim + ]; + + extraConfig = '' + luafile ${./init.lua} + ''; + }; + }; +} diff --git a/modules/home/editors/neovim/init.lua b/modules/programs/neovim/init.lua index 141eb3c..2927d23 100644 --- a/modules/home/editors/neovim/init.lua +++ b/modules/programs/neovim/init.lua @@ -20,7 +20,6 @@ map('n', '<leader>o', '<CMD>update<BAR>source %<CR>', { desc = 'Save & reload in map('n', '<leader>w', '<CMD>write<CR>') map('n', '<leader>q', '<CMD>quit<CR>') - require("mini.starter").setup({ header = table.concat({ " /l、 ", diff --git a/modules/programs/nixcord.nix b/modules/programs/nixcord.nix new file mode 100644 index 0000000..9d3360b --- /dev/null +++ b/modules/programs/nixcord.nix @@ -0,0 +1,28 @@ +{ + flake.modules.homeManager.nixcord = + { + inputs, + ... + }: + { + imports = [ + inputs.nixcord.homeModules.nixcord + ]; + + programs.nixcord = { + enable = true; + config = { + themeLinks = [ + "https://refact0r.github.io/system24/theme/system24.theme.css" + ]; + frameless = true; + plugins = { + alwaysAnimate.enable = false; + imageLink.enable = true; + imageZoom.enable = true; + translate.enable = true; + }; + }; + }; + }; +} diff --git a/modules/programs/obsidian.nix b/modules/programs/obsidian.nix new file mode 100644 index 0000000..873a51a --- /dev/null +++ b/modules/programs/obsidian.nix @@ -0,0 +1,9 @@ +{ + flake.modules.homeManager.obsidian = + { ... }: + { + programs.obsidian = { + enable = true; + }; + }; +} diff --git a/modules/programs/opencode.nix b/modules/programs/opencode.nix new file mode 100644 index 0000000..266562f --- /dev/null +++ b/modules/programs/opencode.nix @@ -0,0 +1,14 @@ +{ + flake.modules.homeManager.opencode = + { ... }: + { + programs.opencode = { + enable = true; + settings = { + theme = "system"; + share = "disabled"; + autoupdate = false; + }; + }; + }; +} diff --git a/modules/programs/spicetify.nix b/modules/programs/spicetify.nix new file mode 100644 index 0000000..4a7e003 --- /dev/null +++ b/modules/programs/spicetify.nix @@ -0,0 +1,34 @@ +{ + flake.modules.homeManager.spicetify = + { + pkgs, + inputs, + ... + }: + let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; + in + { + imports = [ + inputs.spicetify-nix.homeManagerModules.spicetify + ]; + + programs.spicetify = { + enable = true; + enabledSnippets = with spicePkgs.snippets; [ + pointer + sonicDancing + modernScrollbar + nyanCatProgressBar + declutterNowPlayingBar + ]; + + enabledExtensions = with spicePkgs.extensions; [ + keyboardShortcut + ]; + + theme = spicePkgs.themes.sleek; + colorScheme = "Coral"; + }; + }; +} diff --git a/modules/programs/steam.nix b/modules/programs/steam.nix new file mode 100644 index 0000000..311a5b3 --- /dev/null +++ b/modules/programs/steam.nix @@ -0,0 +1,15 @@ +{ + flake.modules.nixos.steam = + { + pkgs, + ... + }: + { + programs.steam = { + enable = true; + protontricks.enable = true; + gamescopeSession.enable = true; + extraCompatPackages = [ pkgs.proton-ge-bin ]; + }; + }; +} diff --git a/modules/programs/vscode.nix b/modules/programs/vscode.nix new file mode 100644 index 0000000..c10fa6b --- /dev/null +++ b/modules/programs/vscode.nix @@ -0,0 +1,63 @@ +{ + flake.modules.homeManager.vscode = + { + config, + lib, + pkgs, + ... + }: + let + inherit (lib) optionals; + in + { + programs.vscode = { + enable = true; + package = pkgs.vscode; + mutableExtensionsDir = false; + profiles.default = { + enableUpdateCheck = true; + enableExtensionUpdateCheck = true; + + userSettings = { + "update.mode" = "none"; + "workbench.colorTheme" = "Minimal"; + "editor.fontFamily" = "monospace"; + "editor.tabSize" = 2; + "editor.minimap.enabled" = false; + "terminal.integrated.cursorStyle" = "underline"; + "terminal.integrated.cursorStyleInactive" = "underline"; + "terminal.integrated.fontFamily" = "monospace"; + "terminal.integrated.fontSize" = 13; + "git.autofetch" = true; + "window.controlsStyle" = "custom"; + }; + + extensions = + with pkgs.vscode-extensions; + [ + github.copilot + adpyke.codesnap + esbenp.prettier-vscode + ] + ++ (optionals false [ ms-vscode.cmake-tools ]) + ++ (optionals false [ ms-azuretools.vscode-docker ]) + ++ (optionals false [ ms-python.python ]) + ++ (optionals false [ golang.go ]) + ++ (optionals false [ rust-lang.rust-analyzer ]) + ++ (optionals false [ vscjava.vscode-maven ]) + ++ (optionals false [ sumneko.lua ]) + ++ (optionals false [ bradlc.vscode-tailwindcss ]) + ++ (optionals true ( + pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "minimalist-dark"; + publisher = "nichabosh"; + version = "1.0.0"; + sha256 = "sha256-lw+Scfada6DycLdRT2Cz+Fd12JucglIrw3uRd2ZhabQ="; + } + ] + )); + }; + }; + }; +} diff --git a/modules/programs/zed.nix b/modules/programs/zed.nix new file mode 100644 index 0000000..0bee73e --- /dev/null +++ b/modules/programs/zed.nix @@ -0,0 +1,40 @@ +{ + flake.modules.homeManager.zed = + { ... }: + { + programs.zed-editor = { + enable = true; + extensions = [ "nix" ]; + userSettings = { + telemetry = { + metrics = false; + }; + title_bar = { + show_onboarding_banner = false; + show_project_items = false; + show_branch_name = false; + show_user_menu = false; + }; + tab_bar.show = false; + toolbar.quick_actions = false; + status_bar."experimental.show" = false; + project_panel = { + dock = "right"; + default_width = 400; + hide_root = true; + auto_fold_dirs = false; + starts_open = false; + git_status = false; + sticky_scroll = false; + scrollbar.show = "never"; + indent_guides.show = "never"; + }; + outline_panel = { + default_width = 300; + indent_guides.show = "never"; + }; + file_finder.modal_max_width = "large"; + }; + }; + }; +} diff --git a/modules/programs/zsh.nix b/modules/programs/zsh.nix new file mode 100644 index 0000000..c36c462 --- /dev/null +++ b/modules/programs/zsh.nix @@ -0,0 +1,62 @@ +{ + flake.modules.homeManager.zsh = + { + pkgs, + ... + }: + { + home.packages = with pkgs; [ + zoxide + ]; + + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + initContent = '' + # view man pages with nvim + export MANPAGER="nvim +Man!" + + # Directory completion with trailing slash + zstyle ':completion:*' list-dirs-first true + zstyle ':completion:*' special-dirs true + zstyle ':completion:*' squeeze-slashes true + zstyle ':completion:*' add-space false + + # Case-insensitive completion + zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + # vim keybindings + bindkey -v + + # Auto cd - type directory name to cd into it + setopt AUTO_CD + + # Complete .. to ../ for directory navigation + setopt AUTO_PARAM_SLASH + + # zoxide smarter cmd command + eval "$(zoxide init zsh)" + ''; + shellAliases = { + ls = "ls --color=auto"; + }; + + zplug = { + enable = true; + plugins = [ + { name = "mafredri/zsh-async"; } + { + name = "sindresorhus/pure"; + tags = [ + "as:theme" + "use:pure.zsh" + ]; + } + { name = "zdharma-continuum/fast-syntax-highlighting"; } + { name = "zsh-users/zsh-autosuggestions"; } + ]; + }; + }; + }; +} diff --git a/modules/secrets/default.nix b/modules/secrets/default.nix deleted file mode 100644 index 966cdc8..0000000 --- a/modules/secrets/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ inputs, ... }: -{ - imports = [ inputs.sops-nix.nixosModules.sops ]; - sops = { - defaultSopsFile = inputs.self + /secrets/secrets.yaml; - age.keyFile = "/etc/sops/age_key"; - secrets = { - "borgbase_ssh_key" = { - owner = "root"; - mode = "0600"; - }; - "nextcloud-secret" = { - owner = "nextcloud"; - group = "nextcloud"; - mode = "0400"; - }; - "nextcloud-admin-pass" = { - owner = "root"; - mode = "0600"; - }; - "ssh_github_key" = { - owner = "administrator"; - mode = "0600"; - }; - "ssh_jonsbo_key" = { - owner = "administrator"; - mode = "0600"; - }; - "ssh_sachiel_key" = { - owner = "administrator"; - mode = "0600"; - }; - "borg_repo" = { - owner = "root"; - mode = "0600"; - }; - "cert_fullchain" = { - owner = "nginx"; - group = "nginx"; - }; - "cert_private" = { - owner = "nginx"; - group = "nginx"; - }; - }; - }; -} diff --git a/modules/services/dns.nix b/modules/services/dns.nix new file mode 100644 index 0000000..1917bf0 --- /dev/null +++ b/modules/services/dns.nix @@ -0,0 +1,34 @@ +{ + flake.modules.nixos.dns = + { lib, ... }: + let + servers = [ + "1.1.1.1#cloudflare-dns.com" + "1.0.0.1#cloudflare-dns.com" + "9.9.9.9#dns.quad9.net" + "149.112.112.112#dns.quad9.net" + ]; + fallbackServers = [ + "8.8.8.8#dns.google" + "8.8.4.4#dns.google" + ]; + in + { + services.resolved = { + enable = true; + settings = { + Resolve = { + DNS = servers; + FallbackDNS = fallbackServers; + DNSSEC = true; + DNSOverTLS = true; + Domains = [ "~." ]; + }; + }; + }; + networking = { + nameservers = servers; + networkmanager.dns = lib.mkDefault "systemd-resolved"; + }; + }; +} diff --git a/modules/services/gpg.nix b/modules/services/gpg.nix new file mode 100644 index 0000000..6b1f2a8 --- /dev/null +++ b/modules/services/gpg.nix @@ -0,0 +1,17 @@ +{ + flake.modules.homeManager.gpg = + { + pkgs, + ... + }: + { + programs.gpg = { + enable = true; + }; + + services.gpg-agent = { + enable = true; + pinentry.package = if pkgs.stdenv.isDarwin then pkgs.pinentry_mac else pkgs.pinentry-curses; + }; + }; +} diff --git a/modules/services/nextcloud.nix b/modules/services/nextcloud.nix new file mode 100644 index 0000000..1c6e656 --- /dev/null +++ b/modules/services/nextcloud.nix @@ -0,0 +1,131 @@ +{ + flake.modules.nixos.nextcloud = + { + config, + lib, + pkgs, + ... + }: + { + services.nextcloud = { + enable = true; + package = pkgs.nextcloud32; + hostName = "cloud.schererleander.de"; + https = true; + database.createLocally = true; + maxUploadSize = "16G"; + config = { + dbtype = "mysql"; + adminuser = "schererleander"; + adminpassFile = config.sops.secrets."nextcloud-admin-pass".path; + }; + secrets = { + secret = config.sops.secrets."nextcloud-secret".path; + }; + settings = { + maintenance_window_start = 2; # 02:00 + default_phone_region = "de"; + overwriteProtocol = "https"; + trusted_domains = [ "cloud.schererleander.de" ]; + logtimezone = config.time.timeZone; + log_type = "file"; + # Disable mail functionality for single-user instance + mail_smtpmode = "null"; + }; + phpOptions."opcache.interned_strings_buffer" = "64"; + }; + + services.nginx.virtualHosts = { + "cloud.schererleander.de" = { + forceSSL = true; + sslCertificate = config.sops.secrets."cert_fullchain".path; + sslCertificateKey = config.sops.secrets."cert_private".path; + }; + }; + + services.borgbackup.jobs.nextcloud = { + paths = [ + "/var/lib/nextcloud" + "/var/lib/backup/nextcloud/db" + ]; + repo = "$BORG_REPO"; + encryption.mode = "none"; + user = "root"; + group = "root"; + environment = { + BORG_RSH = "ssh -i ${ + config.sops.secrets."borgbase_ssh_key".path + } -o StrictHostKeyChecking=accept-new"; + TMPDIR = "/var/tmp"; + }; + compression = "auto,lzma"; + startAt = "daily"; + readWritePaths = [ + "/var/lib/backup" + "/var/lib/nextcloud" + ]; + preHook = '' + set -euo pipefail + + export BORG_REPO="$(cat ${config.sops.secrets."borg_repo".path})" + + INSTALL="${pkgs.coreutils}/bin/install" + FIND="${pkgs.findutils}/bin/find" + MYSQLDUMP="${pkgs.mariadb.client}/bin/mariadb-dump" + GZIP="${pkgs.gzip}/bin/gzip" + OCC="${lib.getExe config.services.nextcloud.occ}" + + # This command requires write access to /var/lib/backup. + $INSTALL -d -m 0750 -o root -g root /var/lib/backup/nextcloud/db + + trap "$OCC maintenance:mode --off >/dev/null 2>&1 || true" EXIT + + $OCC maintenance:mode --on + + # Make a consistent database dump without locking the site. + $MYSQLDUMP --single-transaction --quick --lock-tables=false --databases nextcloud \ + | $GZIP -c > /var/lib/backup/nextcloud/db/nextcloud-$(date +%F-%H%M%S).sql.gz + + # Delete local dump files older than 14 days. + $FIND /var/lib/backup/nextcloud/db -type f -name "*.sql.gz" -mtime +14 -delete || true + ''; + postHook = '' + set -euo pipefail + ${lib.getExe config.services.nextcloud.occ} maintenance:mode --off || true + ''; + }; + + services.fail2ban = { + enable = true; + bantime = lib.mkDefault "1h"; + jails = { + nextcloud = { + enabled = true; + settings = { + backend = "systemd"; + journalmatch = "SYSLOG_IDENTIFIER=Nextcloud"; + # END modification to work with syslog instead of logile + port = 443; + protocol = "tcp"; + filter = "nextcloud"; + maxretry = 3; + findtime = 43200; + }; + }; + }; + }; + + environment.etc = { + # Adapted failregex for syslogs + "fail2ban/filter.d/nextcloud.local".text = pkgs.lib.mkDefault ( + pkgs.lib.mkAfter '' + [Definition] + _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) + failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: + ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error. + datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?" + '' + ); + }; + }; +} diff --git a/modules/services/nginx.nix b/modules/services/nginx.nix new file mode 100644 index 0000000..6ad4c0f --- /dev/null +++ b/modules/services/nginx.nix @@ -0,0 +1,27 @@ +{ + flake.modules.nixos.nginx = + { ... }: + { + services.nginx = { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + appendHttpConfig = '' + map $scheme $hsts_header { + https "max-age=31536000; includeSubdomains; preload"; + } + add_header Strict-Transport-Security $hsts_header; + #add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self';" always; + add_header 'Referrer-Policy' 'same-origin'; + add_header X-Frame-Options DENY; + add_header X-Content-Type-Options nosniff; + ''; + }; + networking.firewall.allowedTCPPorts = [ + 80 + 443 + ]; + }; +} diff --git a/modules/services/openssh.nix b/modules/services/openssh.nix new file mode 100644 index 0000000..68d1511 --- /dev/null +++ b/modules/services/openssh.nix @@ -0,0 +1,35 @@ +{ + flake.modules.nixos.openssh = + { + lib, + ... + }: + { + services.openssh = { + enable = true; + ports = [ 8693 ]; + settings = { + PasswordAuthentication = false; + X11Forwarding = false; + PermitRootLogin = "yes"; + }; + }; + networking.firewall.allowedTCPPorts = [ 8693 ]; + + services.fail2ban = { + enable = true; + bantime = lib.mkDefault "1h"; + jails = { + sshd = { + enabled = true; + settings = { + port = 8693; + backend = "systemd"; + maxretry = 4; + findtime = "10m"; + }; + }; + }; + }; + }; +} diff --git a/modules/services/site.nix b/modules/services/site.nix new file mode 100644 index 0000000..d863dbc --- /dev/null +++ b/modules/services/site.nix @@ -0,0 +1,20 @@ +{ + flake.modules.nixos.site = + { + config, + inputs, + ... + }: + { + imports = [ + inputs.site.nixosModules.default + ]; + + services.site = { + enable = true; + domain = "schererleander.de"; + sslCertificate = config.sops.secrets."cert_fullchain".path; + sslCertificateKey = config.sops.secrets."cert_private".path; + }; + }; +} diff --git a/modules/services/sunshine.nix b/modules/services/sunshine.nix new file mode 100644 index 0000000..69496f2 --- /dev/null +++ b/modules/services/sunshine.nix @@ -0,0 +1,13 @@ +{ + flake.modules.nixos.sunshine = + { ... }: + { + services.sunshine = { + enable = true; + autoStart = true; + capSysAdmin = true; + openFirewall = true; + }; + hardware.graphics.enable = true; + }; +} diff --git a/modules/nixos/hardware/audio/default.nix b/modules/system/audio.nix index 66c9606..4dd829b 100644 --- a/modules/nixos/hardware/audio/default.nix +++ b/modules/system/audio.nix @@ -1,12 +1,5 @@ -{ config, lib, ... }: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.hardware.audio; -in { - options.nx.hardware.audio.enable = mkEnableOption "PipeWire audio"; - - config = mkIf cfg.enable { + flake.modules.nixos.audio = { security.rtkit.enable = true; services.pipewire = { enable = true; diff --git a/modules/nixos/hardware/bluetooth/default.nix b/modules/system/bluetooth.nix index 1bb9014..2935b7d 100644 --- a/modules/nixos/hardware/bluetooth/default.nix +++ b/modules/system/bluetooth.nix @@ -1,12 +1,5 @@ -{ config, lib, ... }: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nx.hardware.bluetooth; -in { - options.nx.hardware.bluetooth.enable = mkEnableOption "Bluetooth support"; - - config = mkIf cfg.enable { + flake.modules.nixos.bluetooth = { hardware.bluetooth = { enable = true; powerOnBoot = true; diff --git a/modules/system/kde.nix b/modules/system/kde.nix new file mode 100644 index 0000000..f5b396b --- /dev/null +++ b/modules/system/kde.nix @@ -0,0 +1,17 @@ +{ + flake.modules.nixos.kde = + { pkgs, ... }: + { + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + }; + services.desktopManager.plasma6.enable = true; + security.pam.services.sddm.enableKwallet = true; + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + elisa + kate + ]; + environment.systemPackages = with pkgs.kdePackages; [ kcalc ]; + }; +} diff --git a/modules/system/mullvad-vpn.nix b/modules/system/mullvad-vpn.nix new file mode 100644 index 0000000..ac17615 --- /dev/null +++ b/modules/system/mullvad-vpn.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.mullvad-vpn = + { + pkgs, + ... + }: + { + services.mullvad-vpn.enable = true; + environment.systemPackages = [ pkgs.mullvad-vpn ]; + }; +} diff --git a/modules/system/plymouth.nix b/modules/system/plymouth.nix new file mode 100644 index 0000000..17ccddc --- /dev/null +++ b/modules/system/plymouth.nix @@ -0,0 +1,31 @@ +{ + flake.modules.nixos.plymouth = + { lib, pkgs, ... }: + { + boot = { + # Show password prompt for encrypted root + initrd.systemd.enable = true; + kernelParams = [ "quiet" ]; + loader.systemd-boot.consoleMode = "max"; + plymouth = { + enable = true; + theme = "loader_2"; + themePackages = with pkgs; [ + (adi1090x-plymouth-themes.override { + selected_themes = [ + #"lone" + #"red_loader" + #"cuts_alt" + #"abstract_ring_alt" + "loader_2" + #"sliced" + #"spinner_alt" + #"sphere" + #"loader" + ]; + }) + ]; + }; + }; + }; +} diff --git a/modules/system/printer.nix b/modules/system/printer.nix new file mode 100644 index 0000000..382fc1a --- /dev/null +++ b/modules/system/printer.nix @@ -0,0 +1,15 @@ +{ + flake.modules.nixos.printer = + { pkgs, ... }: + { + services.printing = { + enable = true; + drivers = [ pkgs.brlaser ]; + }; + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + }; +} diff --git a/modules/system/secrets.nix b/modules/system/secrets.nix new file mode 100644 index 0000000..e59c7da --- /dev/null +++ b/modules/system/secrets.nix @@ -0,0 +1,50 @@ +{ + flake.modules.nixos.secrets = + { inputs, ... }: + { + imports = [ inputs.sops-nix.nixosModules.sops ]; + sops = { + defaultSopsFile = inputs.self + /secrets/secrets.yaml; + age.keyFile = "/etc/sops/age_key"; + secrets = { + "borgbase_ssh_key" = { + owner = "root"; + mode = "0600"; + }; + "nextcloud-secret" = { + owner = "nextcloud"; + group = "nextcloud"; + mode = "0400"; + }; + "nextcloud-admin-pass" = { + owner = "root"; + mode = "0600"; + }; + "ssh_github_key" = { + owner = "administrator"; + mode = "0600"; + }; + "ssh_jonsbo_key" = { + owner = "administrator"; + mode = "0600"; + }; + "ssh_sachiel_key" = { + owner = "administrator"; + mode = "0600"; + }; + "borg_repo" = { + owner = "root"; + mode = "0600"; + }; + "cert_fullchain" = { + owner = "nginx"; + group = "nginx"; + }; + "cert_private" = { + owner = "nginx"; + group = "nginx"; + }; + }; + }; + }; +} diff --git a/modules/system/wooting.nix b/modules/system/wooting.nix new file mode 100644 index 0000000..e2240ab --- /dev/null +++ b/modules/system/wooting.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.wooting = + { + pkgs, + ... + }: + { + services.udev.packages = [ pkgs.wooting-udev-rules ]; + environment.systemPackages = [ pkgs.wootility ]; + }; +} diff --git a/modules/users/schererleander/configuration.nix b/modules/users/schererleander/configuration.nix new file mode 100644 index 0000000..af96789 --- /dev/null +++ b/modules/users/schererleander/configuration.nix @@ -0,0 +1,22 @@ +{ + flake.modules.homeManager.schererleander = + { inputs, ... }: + { + imports = with inputs.self.modules.homeManager; [ + gpg + git + zsh + opencode + neovim + zed + nixcord + spicetify + obsidian + ]; + + home = { + username = "schererleander"; + stateVersion = "25.05"; + }; + }; +} diff --git a/modules/users/schererleander/darwin.nix b/modules/users/schererleander/darwin.nix new file mode 100644 index 0000000..a4ef2a4 --- /dev/null +++ b/modules/users/schererleander/darwin.nix @@ -0,0 +1,14 @@ +{ + flake.modules.darwin.home-manager = + { inputs, ... }: + { + imports = [ inputs.home-manager.darwinModules.home-manager ]; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { inherit inputs; }; + users.schererleander = inputs.self.modules.homeManager.schererleander; + }; + }; +} diff --git a/modules/users/schererleander/flake-parts.nix b/modules/users/schererleander/flake-parts.nix new file mode 100644 index 0000000..fa43869 --- /dev/null +++ b/modules/users/schererleander/flake-parts.nix @@ -0,0 +1,28 @@ +{ inputs, ... }: +{ + flake.homeConfigurations = { + # NixOS configuration for adam workstation + "schererleander@adam" = inputs.home-manager.lib.homeManagerConfiguration { + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; + extraSpecialArgs = { inherit inputs; }; + modules = [ + inputs.self.modules.homeManager.user-schererleander + { + home.homeDirectory = "/home/schererleander"; + } + ]; + }; + + # Darwin configuration for lilith laptop + "schererleander@lilith" = inputs.home-manager.lib.homeManagerConfiguration { + pkgs = inputs.nixpkgs.legacyPackages.aarch64-darwin; + extraSpecialArgs = { inherit inputs; }; + modules = [ + inputs.self.modules.homeManager.user-schererleander + { + home.homeDirectory = "/Users/schererleander"; + } + ]; + }; + }; +} diff --git a/modules/users/schererleander/nixos.nix b/modules/users/schererleander/nixos.nix new file mode 100644 index 0000000..0a34e7b --- /dev/null +++ b/modules/users/schererleander/nixos.nix @@ -0,0 +1,14 @@ +{ + flake.modules.nixos.home-manager = + { inputs, ... }: + { + imports = [ inputs.home-manager.nixosModules.home-manager ]; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { inherit inputs; }; + users.schererleander = inputs.self.modules.homeManager.schererleander; + }; + }; +} |
