diff --git a/flake.lock b/flake.lock index d259d93..8f9a38a 100644 --- a/flake.lock +++ b/flake.lock @@ -71,11 +71,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1764873433, - "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", + "lastModified": 1773024283, + "narHash": "sha256-6cGDN/2iSNUJWp035zzr6BZCzFtO92PIKNeWxuwPPcA=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", + "rev": "43bc26501a637c68df723645966b77168cefa9d0", "type": "github" }, "original": { @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772047000, - "narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=", + "lastModified": 1773814637, + "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e", + "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", "type": "github" }, "original": { @@ -216,11 +216,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1771848320, - "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 9a7d0c7..c16e83e 100644 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,9 @@ stylix = { url = "github:nix-community/stylix/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; + # Override to pick up fix for invisible extension icons + # https://github.com/rafaelmardojai/firefox-gnome-theme/issues/1061 + inputs.firefox-gnome-theme.url = "github:rafaelmardojai/firefox-gnome-theme"; }; nur.url = "github:nix-community/NUR"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; @@ -41,12 +44,12 @@ inputs.home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.luci = import ./luci/modules/home-manager/home.nix; + home-manager.users.luci = import ./hosts/luci/modules/home-manager/home.nix; home-manager.extraSpecialArgs = { inherit inputs outputs; }; } - ./luci/default.nix + ./hosts/luci/default.nix ]; }; nate = nixpkgs.lib.nixosSystem { @@ -60,12 +63,12 @@ inputs.home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.nate = import ./nate/modules/home-manager/home.nix; + home-manager.users.nate = import ./hosts/nate/modules/home-manager/home.nix; home-manager.extraSpecialArgs = { inherit inputs outputs unstablePkgs; }; } - ./nate/default.nix + ./hosts/nate/default.nix ]; }; nate-work = nixpkgs.lib.nixosSystem { @@ -79,12 +82,12 @@ inputs.home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.nate = import ./nate-work/modules/home-manager/home.nix; + home-manager.users.nate = import ./hosts/nate-work/modules/home-manager/home.nix; home-manager.extraSpecialArgs = { inherit inputs outputs unstablePkgs; }; } - ./nate-work/default.nix + ./hosts/nate-work/default.nix ]; }; jaci = nixpkgs.lib.nixosSystem { @@ -98,12 +101,12 @@ inputs.home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.jaci = import ./jaci/modules/home-manager/home.nix; + home-manager.users.jaci = import ./hosts/jaci/modules/home-manager/home.nix; home-manager.extraSpecialArgs = { inherit inputs outputs unstablePkgs; }; } - ./jaci/default.nix + ./hosts/jaci/default.nix ]; }; # DEPRECATED: scrappy system is no longer in use @@ -117,12 +120,12 @@ # inputs.home-manager.nixosModules.home-manager { # home-manager.useGlobalPkgs = true; # home-manager.useUserPackages = true; - # home-manager.users.scrappy = import ./scrappy/modules/home-manager/home.nix; + # home-manager.users.scrappy = import ./hosts/scrappy/modules/home-manager/home.nix; # home-manager.extraSpecialArgs = { # inherit inputs outputs unstablePkgs; # }; # } - # ./scrappy/default.nix + # ./hosts/scrappy/default.nix # ]; # }; frame12 = nixpkgs.lib.nixosSystem { @@ -136,12 +139,12 @@ inputs.home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.nate = import ./frame12/modules/home-manager/home.nix; + home-manager.users.nate = import ./hosts/frame12/modules/home-manager/home.nix; home-manager.extraSpecialArgs = { inherit inputs outputs unstablePkgs; }; } - ./frame12/default.nix + ./hosts/frame12/default.nix ]; }; }; diff --git a/frame12/default.nix b/frame12/default.nix deleted file mode 100644 index 613d4aa..0000000 --- a/frame12/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }: - let - userName = "nate"; - fullName = "Nate Anderson"; - email = "n8r@tuta.io"; - hostName = "frame12"; - desktop = "niri"; - in -{ - imports = [ - inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel - ./desktop-configuration.nix - ./nixos/hardware-configuration.nix - ]; - - deskCfg = { - userName = userName; - hostName = hostName; - fullName = fullName; - de = desktop; - flakePath = "/home/${userName}/nixos"; - }; - - # Limit the number of generations to keep - boot.loader.systemd-boot.configurationLimit = 5; - - # Systemd initrd for Plymouth and faster boot - boot.initrd.systemd.enable = true; - - # Perform garbage collection weekly to maintain low disk usage - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 14d"; - }; - - # Optimize storage - # You can also manually optimize the store via: - # nix-store --optimise - # Refer to the following link for more details: - # https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store - nix.settings.auto-optimise-store = true; -} diff --git a/frame12/desktop-configuration.nix b/frame12/desktop-configuration.nix deleted file mode 100644 index d65dcbd..0000000 --- a/frame12/desktop-configuration.nix +++ /dev/null @@ -1,239 +0,0 @@ -{ - config, - lib, - inputs, - outputs, - pkgs, - timeZone, - system, - ... -}: -let - supportedDesktops = [ "niri" ]; - supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; - deskCfg = config.deskCfg; -in -{ - options.deskCfg = { - de = lib.mkOption { - default = ""; - type = lib.types.str; - description = "Desktop Environment"; - }; - userName = lib.mkOption { - type = lib.types.str; - description = "Main username for system"; - }; - hostName = lib.mkOption { - type = lib.types.str; - description = "Hostname for system"; - }; - fullName = lib.mkOption { - type = lib.types.str; - default = "User"; - description = "Full display name for the user"; - }; - flakePath = lib.mkOption { - type = lib.types.str; - description = "Absolute path to the NixOS flake configuration directory"; - }; - }; - - imports = [ - ../shared/modules/user/main_user.nix - modules/niri/niri_conf.nix - modules/colemak-ec.nix - ../shared/modules/system/power_manager.nix - ../shared/modules/system/noctalia-system.nix - ]; - - config = { - assertions = [ - { - assertion = builtins.elem deskCfg.de supportedDesktops; - message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}"; - } - ]; - - # Stylix theming - stylix = { - enable = true; - # image = ./wallpaper.png; - - # Check with `nix build nixpkgs#base16-schemes && ls result/share/themes` - base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml"; - polarity = "dark"; - - # System-wide cursor - cursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 32; - }; - - # Fonts - fonts = { - serif = { - package = pkgs.lato; - name = "Lato"; - }; - sansSerif = { - package = pkgs.lato; - name = "Lato"; - }; - monospace = { - package = pkgs.maple-mono.NF; - name = "Maple Mono NF"; - }; - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - sizes = { - applications = 14; - desktop = 12; - popups = 12; - terminal = 16; - }; - }; - - # Icon theme for tray applets (nm-applet, etc.) - iconTheme = { - enable = true; - package = pkgs.papirus-icon-theme; - light = "Papirus-Light"; - dark = "Papirus-Dark"; - }; - - targets = { - # Keep custom Framework plymouth theme - plymouth.enable = false; - }; - }; - - nixpkgs.overlays = [ - inputs.nur.overlays.default - ]; - - # Intel graphics acceleration - hardware.graphics.enable = true; - hardware.enableRedistributableFirmware = true; - - # Enable flakes feature - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - nixpkgs.config.allowUnfree = true; - - boot = { - plymouth = { - enable = true; - theme = "framework"; - themePackages = [ - (pkgs.runCommand "plymouth-framework-theme" { } '' - mkdir -p $out/share/plymouth/themes/framework - cp -r ${./framework-plymouth-theme/framework}/* $out/share/plymouth/themes/framework/ - substituteInPlace $out/share/plymouth/themes/framework/framework.plymouth \ - --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework" - # substituteInPlace $out/share/plymouth/themes/framework/framework.script \ - # --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework" - '') - ]; - }; - - # Enable "Silent Boot" - consoleLogLevel = 0; - initrd.verbose = false; - kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" - "loglevel=3" - "rd.systemd.show_status=false" - "rd.udev.log_level=3" - "udev.log_priority=3" - ]; - # Hide the OS choice for bootloaders. - # It's still possible to open the bootloader list by pressing any key - # It will just not appear on screen unless a key is pressed - loader.timeout = 1; - # Use the systemd-boot EFI boot loader. - loader.systemd-boot.enable = true; - loader.efi.canTouchEfiVariables = true; - # Use latest kernel packages - kernelPackages = pkgs.linuxPackages_latest; - }; - networking.hostName = deskCfg.hostName; # Define your hostname. - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - networking.wireless.iwd.enable = true; - - time.timeZone = timeZone; - - main_user = { - enable = true; - userName = deskCfg.userName; - fullName = deskCfg.fullName; - isDesktopUser = true; - extraGroups = [ - "corectrl" - "dialout" - "docker" - ]; - }; - - power_manager = { - enable = true; - backend = "power-profiles-daemon"; # Required for Noctalia power profile widget - }; - - # Enable Noctalia shell system services - noctaliaSystem.enable = true; - - niriwm = { - enable = true; - useNonFree = true; - user = deskCfg.userName; - systemPackages = with pkgs; [ - libreoffice - rpi-imager - ]; - }; - - environment.systemPackages = with pkgs; [ - cryptsetup - cage - ]; - - programs.niri.enable = true; - # For electron apps in wayland - environment.sessionVariables.NIXOS_OZONE_WL = "1"; - - # auto write colemak-dh to keyboard ec - colemakEc.enable = true; - - services.greetd = { - enable = true; - settings = rec { - initial_session = { - command = "${pkgs.niri}/bin/niri-session"; - user = "nate"; - }; - default_session = initial_session; - }; - }; - - networking.firewall = { - enable = true; - allowedTCPPorts = [ - 8080 - 8081 - ]; # Open port 8080 for TCP - # allowedUDPPorts = [ ... ]; # If you need UDP ports - }; - - # For yubioath desktop - services.pcscd.enable = true; - system.stateVersion = "25.05"; # Did you read the comment? - }; -} diff --git a/frame12/modules/niri/niri_conf.nix b/frame12/modules/niri/niri_conf.nix deleted file mode 100755 index 4a00d09..0000000 --- a/frame12/modules/niri/niri_conf.nix +++ /dev/null @@ -1,255 +0,0 @@ -{ - inputs, - lib, - config, - pkgs, - userName, - ... -}: -let - unstable = import inputs.nixpkgs-unstable { - system = "x86_64-linux"; - config.allowUnfree = true; - }; -in -{ - options.niriwm = { - enable = lib.mkEnableOption "Enable niri window manager."; - useNonFree = lib.mkOption { - default = false; - example = true; - description = "Whether to enable non-free software in the niri config"; - }; - systemPackages = lib.mkOption { - default = [ ]; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - user = lib.mkOption { - type = lib.types.str; - }; - - }; - - ### - ## Configuration - ### - config = lib.mkIf config.niriwm.enable { - - nixpkgs.config.allowUnfree = config.niriwm.useNonFree; - - # Portal config: programs.niri.enable adds xdg-desktop-portal-gnome - # and niri-portals.conf via configPackages, but the portal daemon - # doesn't reliably pick up configPackages files. Setting config - # explicitly ensures ScreenCast routes to the GNOME portal. - xdg.portal.config.niri = { - default = [ "gnome" "gtk" ]; - "org.freedesktop.impl.portal.Access" = [ "gtk" ]; - "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; - "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; - }; - xdg.sounds.enable = true; - - ### - ## System Packages - ### - environment.systemPackages = - with pkgs; - lib.lists.flatten [ - [ - bash - egl-wayland - git - glib # gsettings - grim - kanshi - libnotify - lxqt.lxqt-policykit - man-pages - man-pages-posix - nautilus - pavucontrol - slurp - swaylock - swayosd - syncthingtray - unstable.ghostty - unstable.xwayland-satellite - wdisplays - wl-clipboard - xdg-utils - zsh - ] - config.niriwm.systemPackages - ]; - environment.variables.QT_STYLE_OVERRIDE = "kvantum"; - environment.sessionVariables = { - # use wayland - MOZ_ENABLE_WAYLAND = "1"; - # QT_QPA_PLATFORM and GDK_BACKEND must NOT be set - they break the screencast portal - WLR_NO_HARDWARE_CURSORS = "1"; - ELECTRON_OZONE_PLATFORM_HINT = "auto"; - NIXOS_OZONE_WL = "1"; - # VA-API driver for hardware video acceleration (Intel 13th gen) - LIBVA_DRIVER_NAME = "iHD"; - }; - - # adds additional man pages - documentation.dev.enable = true; - - programs.gamemode = { - enable = true; - settings = { - general = { - reaper_freq = 5; - desiredgov = "performance"; - softrealtime = "auto"; - }; - }; - }; - programs.kdeconnect.enable = true; - programs.niri.enable = true; - programs.regreet.enable = true; - programs.xfconf.enable = true; - programs.zsh.enable = true; - programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead - programs.adb.enable = true; - - # For nautilus - services.gnome.sushi.enable = true; - programs.nautilus-open-any-terminal = { - enable = true; - terminal = "ghostty"; - }; - - services.syncthing = { - enable = true; - dataDir = "/home/${config.niriwm.user}/.syncthing"; - openDefaultPorts = true; - user = config.niriwm.user; - }; - systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder - - # Set zsh as the default shell system-wide - users.defaultUserShell = pkgs.zsh; - environment.shells = with pkgs; [ - zsh - bash - ]; - - ### - ## Services - ### - # services.blueman.enable = true; # Noctalia handles bluetooth - services.gvfs.enable = true; # file manager mount, trash, etc - services.tumbler.enable = true; # thunar thumbnails - services.openssh.enable = true; - services.dbus.enable = true; - services.gnome.gnome-keyring.enable = true; - services.flatpak.enable = true; - services.usbmuxd.enable = false; - - # For yubioath desktop - services.pcscd.enable = true; - - # Printing - services.printing = { - enable = true; - browsing = true; - drivers = [ pkgs.brlaser ]; - }; - - # Audio - Modern PipeWire setup for Framework laptop - # Disable PulseAudio in favor of PipeWire - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - audio.enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - wireplumber.extraConfig = { - "wireplumber.settings" = { - bluetooth.autoswitch-to-headset-profile = false; - }; - bluetoothEnhancements = { - "monitor.bluez.properties" = { - "bluez5.enable-sbc-xq" = true; - "bluez5.enable-msbc" = true; - "bluez5.enable-hw-volume" = true; - # Default roles: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/bluetooth.html#monitor-properties - "bluez5.roles" = [ - "a2dp_sink" - "a2dp_source" - "bap_sink" - "bap_source" - "hfp_hf" - "hfp_ag" - ]; - }; - }; - }; - }; - - ### - ## Misc - ### - # Necessary for home-manager niri setup - security.polkit.enable = true; - - # Keyring setup - security.pam.services.greetd.enableGnomeKeyring = true; - security.pam.services.login.enableGnomeKeyring = true; - - hardware.bluetooth = { - enable = true; - powerOnBoot = true; # powers up the default Bluetooth controller on boot - settings = { - General = { - Name = "Nate-Frame"; - ControllerMode = "dual"; - FastConnectable = "true"; - Experimental = "true"; - }; - Policy = { - AutoEnable = "true"; - }; - LE = { - EnableAdvMonInterleaveScan = 1; - }; - }; - }; - - # - # Hardware scanning support - # - hardware.sane = { - enable = true; - brscan5.enable = true; - }; - - virtualisation.docker = { - enable = true; - rootless = { - enable = true; - setSocketVariable = true; - }; - daemon.settings = { - # not needed, intended for windoze - userland-proxy = false; - }; - }; - # - # udev rules - # - services.udev.extraRules = '' - # For betaflight configurator - # DFU (Internal bootloader for STM32 and AT32 MCUs) - SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - # For ddcutil monitor controls - KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" - ''; - }; -} diff --git a/frame12/modules/niri/niri_home.nix b/frame12/modules/niri/niri_home.nix deleted file mode 100644 index d6afb5e..0000000 --- a/frame12/modules/niri/niri_home.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ inputs, lib, config, pkgs, ... }: -{ - imports = [ - ../../../shared/modules/home-manager/waybar.nix - ]; - - options.nirihome = { - enable = lib.mkEnableOption "Enable niri home config"; - homePackages = lib.mkOption { - default = []; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - }; - - config = lib.mkIf config.nirihome.enable { - # Note: We don't use wayland.windowManager.niri in home-manager - # because we manage the niri config through dotfiles. - # The system-level module enables niri via programs.niri.enable - - # Niri sets WAYLAND_DISPLAY and XDG_CURRENT_DESKTOP automatically. - # Manually overriding session vars conflicts with xdg-desktop-portal-gnome - # screencasting (breaks Zoom screen sharing). - - # Cursor is managed by Stylix (stylix.cursor in frame12/default.nix) - - # Waybar with Stylix theming - waybarConfig.enable = true; - - home.packages = with pkgs; lib.lists.flatten [ - [ - ### niri packages - swaybg - swaylock-effects - # Etc - gopsuinfo # For system stats in panel - wl-clipboard # System clipboard - brightnessctl - wev - wdisplays - # Notifs - libnotify - swaynotificationcenter - # Tray Applets - # networkmanagerapplet # Noctalia handles wifi - pavucontrol - syncthingtray - tailscale-systray - # Portals are managed at system level by programs.niri.enable - ] - config.nirihome.homePackages - ]; - programs.cava = { - enable = true; - settings = { - smoothing.noise_reduction = 55; - }; - }; - }; -} diff --git a/hosts/frame12/default.nix b/hosts/frame12/default.nix new file mode 100644 index 0000000..eb765b1 --- /dev/null +++ b/hosts/frame12/default.nix @@ -0,0 +1,128 @@ +{ config, lib, inputs, pkgs, timeZone, ... }: +let + deskCfg = config.deskCfg; +in +{ + imports = [ + inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel + ./nixos/hardware-configuration.nix + ../../shared/modules/desktop/base.nix + ../../shared/modules/desktop/stylix.nix + ../../shared/modules/desktop/silent-boot.nix + ../../shared/modules/desktop/greetd.nix + ../../shared/modules/wm/niri.nix + ../../shared/modules/services/syncthing.nix + ../../shared/modules/services/kdeconnect.nix + ../../shared/modules/services/docker.nix + ../../shared/modules/services/colemak-ec.nix + ../../shared/modules/services/hyprvoice.nix + ]; + + deskCfg = { + userName = "nate"; + hostName = "frame12"; + fullName = "Nate Anderson"; + de = "niri"; + }; + + # Limit the number of generations to keep + boot.loader.systemd-boot.configurationLimit = 5; + boot.kernelPackages = pkgs.linuxPackages_latest; + + # Systemd initrd for Plymouth and faster boot + boot.initrd.systemd.enable = true; + + # Silent boot + silentBoot.enable = true; + + # Plymouth — custom Framework theme + boot.plymouth = { + enable = true; + theme = "framework"; + themePackages = [ + (pkgs.runCommand "plymouth-framework-theme" { } '' + mkdir -p $out/share/plymouth/themes/framework + cp -r ${./framework-plymouth-theme/framework}/* $out/share/plymouth/themes/framework/ + substituteInPlace $out/share/plymouth/themes/framework/framework.plymouth \ + --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework" + '') + ]; + }; + + # Perform garbage collection weekly to maintain low disk usage + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + nix.settings.auto-optimise-store = true; + + # IWD wireless backend + networking.wireless.iwd.enable = true; + + # Extra groups + main_user.extraGroups = [ "corectrl" "dialout" "docker" ]; + + # Stylix overrides — kimber dark theme, terminal font size 16 + stylix = { + base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml"; + fonts.sizes.terminal = 16; + }; + + # Intel graphics acceleration (Framework 12) + hardware.graphics.enable = true; + hardware.enableRedistributableFirmware = true; + + # Intel iHD GPU + environment.sessionVariables.LIBVA_DRIVER_NAME = "iHD"; + + # Niri WM config + niriwm = { + enable = true; + useNonFree = true; + user = deskCfg.userName; + systemPackages = with pkgs; [ + libreoffice + rpi-imager + ]; + }; + + # Frame12-specific packages + environment.systemPackages = with pkgs; [ + cryptsetup + cage + kanshi + man-pages + man-pages-posix + pavucontrol + swayosd + wdisplays + ]; + + # Colemak-DH EC remap + colemakEc.enable = true; + + # Docker — rootless + dockerConfig.rootless = true; + + # Hyprvoice dictation + services.hyprvoice = { + enable = true; + user = deskCfg.userName; + }; + + # Bluetooth name + hardware.bluetooth.settings.General.Name = "Nate-Frame"; + + # udev rules — betaflight configurator + i2c for ddcutil + services.udev.extraRules = '' + # For betaflight configurator + # DFU (Internal bootloader for STM32 and AT32 MCUs) + SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + # For ddcutil monitor controls + KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" + ''; + + system.stateVersion = "25.05"; +} diff --git a/frame12/dump-matrix.py b/hosts/frame12/dump-matrix.py similarity index 100% rename from frame12/dump-matrix.py rename to hosts/frame12/dump-matrix.py diff --git a/frame12/framework-plymouth-theme/LICENSE b/hosts/frame12/framework-plymouth-theme/LICENSE similarity index 100% rename from frame12/framework-plymouth-theme/LICENSE rename to hosts/frame12/framework-plymouth-theme/LICENSE diff --git a/frame12/framework-plymouth-theme/README.md b/hosts/frame12/framework-plymouth-theme/README.md similarity index 100% rename from frame12/framework-plymouth-theme/README.md rename to hosts/frame12/framework-plymouth-theme/README.md diff --git a/frame12/framework-plymouth-theme/SCRIPTING.md b/hosts/frame12/framework-plymouth-theme/SCRIPTING.md similarity index 100% rename from frame12/framework-plymouth-theme/SCRIPTING.md rename to hosts/frame12/framework-plymouth-theme/SCRIPTING.md diff --git a/frame12/framework-plymouth-theme/framework/bullet.png b/hosts/frame12/framework-plymouth-theme/framework/bullet.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/bullet.png rename to hosts/frame12/framework-plymouth-theme/framework/bullet.png diff --git a/frame12/framework-plymouth-theme/framework/capslock.png b/hosts/frame12/framework-plymouth-theme/framework/capslock.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/capslock.png rename to hosts/frame12/framework-plymouth-theme/framework/capslock.png diff --git a/frame12/framework-plymouth-theme/framework/entry.png b/hosts/frame12/framework-plymouth-theme/framework/entry.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/entry.png rename to hosts/frame12/framework-plymouth-theme/framework/entry.png diff --git a/frame12/framework-plymouth-theme/framework/framework.plymouth b/hosts/frame12/framework-plymouth-theme/framework/framework.plymouth similarity index 100% rename from frame12/framework-plymouth-theme/framework/framework.plymouth rename to hosts/frame12/framework-plymouth-theme/framework/framework.plymouth diff --git a/frame12/framework-plymouth-theme/framework/framework.script b/hosts/frame12/framework-plymouth-theme/framework/framework.script similarity index 100% rename from frame12/framework-plymouth-theme/framework/framework.script rename to hosts/frame12/framework-plymouth-theme/framework/framework.script diff --git a/frame12/framework-plymouth-theme/framework/keyboard.png b/hosts/frame12/framework-plymouth-theme/framework/keyboard.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/keyboard.png rename to hosts/frame12/framework-plymouth-theme/framework/keyboard.png diff --git a/frame12/framework-plymouth-theme/framework/keymap-render.png b/hosts/frame12/framework-plymouth-theme/framework/keymap-render.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/keymap-render.png rename to hosts/frame12/framework-plymouth-theme/framework/keymap-render.png diff --git a/frame12/framework-plymouth-theme/framework/lock.png b/hosts/frame12/framework-plymouth-theme/framework/lock.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/lock.png rename to hosts/frame12/framework-plymouth-theme/framework/lock.png diff --git a/frame12/framework-plymouth-theme/framework/progress-0.png b/hosts/frame12/framework-plymouth-theme/framework/progress-0.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-0.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-0.png diff --git a/frame12/framework-plymouth-theme/framework/progress-1.png b/hosts/frame12/framework-plymouth-theme/framework/progress-1.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-1.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-1.png diff --git a/frame12/framework-plymouth-theme/framework/progress-10.png b/hosts/frame12/framework-plymouth-theme/framework/progress-10.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-10.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-10.png diff --git a/frame12/framework-plymouth-theme/framework/progress-100.png b/hosts/frame12/framework-plymouth-theme/framework/progress-100.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-100.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-100.png diff --git a/frame12/framework-plymouth-theme/framework/progress-101.png b/hosts/frame12/framework-plymouth-theme/framework/progress-101.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-101.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-101.png diff --git a/frame12/framework-plymouth-theme/framework/progress-102.png b/hosts/frame12/framework-plymouth-theme/framework/progress-102.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-102.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-102.png diff --git a/frame12/framework-plymouth-theme/framework/progress-103.png b/hosts/frame12/framework-plymouth-theme/framework/progress-103.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-103.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-103.png diff --git a/frame12/framework-plymouth-theme/framework/progress-104.png b/hosts/frame12/framework-plymouth-theme/framework/progress-104.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-104.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-104.png diff --git a/frame12/framework-plymouth-theme/framework/progress-105.png b/hosts/frame12/framework-plymouth-theme/framework/progress-105.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-105.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-105.png diff --git a/frame12/framework-plymouth-theme/framework/progress-106.png b/hosts/frame12/framework-plymouth-theme/framework/progress-106.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-106.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-106.png diff --git a/frame12/framework-plymouth-theme/framework/progress-107.png b/hosts/frame12/framework-plymouth-theme/framework/progress-107.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-107.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-107.png diff --git a/frame12/framework-plymouth-theme/framework/progress-108.png b/hosts/frame12/framework-plymouth-theme/framework/progress-108.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-108.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-108.png diff --git a/frame12/framework-plymouth-theme/framework/progress-109.png b/hosts/frame12/framework-plymouth-theme/framework/progress-109.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-109.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-109.png diff --git a/frame12/framework-plymouth-theme/framework/progress-11.png b/hosts/frame12/framework-plymouth-theme/framework/progress-11.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-11.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-11.png diff --git a/frame12/framework-plymouth-theme/framework/progress-110.png b/hosts/frame12/framework-plymouth-theme/framework/progress-110.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-110.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-110.png diff --git a/frame12/framework-plymouth-theme/framework/progress-111.png b/hosts/frame12/framework-plymouth-theme/framework/progress-111.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-111.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-111.png diff --git a/frame12/framework-plymouth-theme/framework/progress-112.png b/hosts/frame12/framework-plymouth-theme/framework/progress-112.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-112.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-112.png diff --git a/frame12/framework-plymouth-theme/framework/progress-113.png b/hosts/frame12/framework-plymouth-theme/framework/progress-113.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-113.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-113.png diff --git a/frame12/framework-plymouth-theme/framework/progress-114.png b/hosts/frame12/framework-plymouth-theme/framework/progress-114.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-114.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-114.png diff --git a/frame12/framework-plymouth-theme/framework/progress-115.png b/hosts/frame12/framework-plymouth-theme/framework/progress-115.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-115.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-115.png diff --git a/frame12/framework-plymouth-theme/framework/progress-116.png b/hosts/frame12/framework-plymouth-theme/framework/progress-116.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-116.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-116.png diff --git a/frame12/framework-plymouth-theme/framework/progress-117.png b/hosts/frame12/framework-plymouth-theme/framework/progress-117.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-117.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-117.png diff --git a/frame12/framework-plymouth-theme/framework/progress-118.png b/hosts/frame12/framework-plymouth-theme/framework/progress-118.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-118.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-118.png diff --git a/frame12/framework-plymouth-theme/framework/progress-119.png b/hosts/frame12/framework-plymouth-theme/framework/progress-119.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-119.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-119.png diff --git a/frame12/framework-plymouth-theme/framework/progress-12.png b/hosts/frame12/framework-plymouth-theme/framework/progress-12.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-12.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-12.png diff --git a/frame12/framework-plymouth-theme/framework/progress-120.png b/hosts/frame12/framework-plymouth-theme/framework/progress-120.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-120.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-120.png diff --git a/frame12/framework-plymouth-theme/framework/progress-121.png b/hosts/frame12/framework-plymouth-theme/framework/progress-121.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-121.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-121.png diff --git a/frame12/framework-plymouth-theme/framework/progress-122.png b/hosts/frame12/framework-plymouth-theme/framework/progress-122.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-122.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-122.png diff --git a/frame12/framework-plymouth-theme/framework/progress-123.png b/hosts/frame12/framework-plymouth-theme/framework/progress-123.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-123.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-123.png diff --git a/frame12/framework-plymouth-theme/framework/progress-124.png b/hosts/frame12/framework-plymouth-theme/framework/progress-124.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-124.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-124.png diff --git a/frame12/framework-plymouth-theme/framework/progress-125.png b/hosts/frame12/framework-plymouth-theme/framework/progress-125.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-125.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-125.png diff --git a/frame12/framework-plymouth-theme/framework/progress-126.png b/hosts/frame12/framework-plymouth-theme/framework/progress-126.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-126.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-126.png diff --git a/frame12/framework-plymouth-theme/framework/progress-127.png b/hosts/frame12/framework-plymouth-theme/framework/progress-127.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-127.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-127.png diff --git a/frame12/framework-plymouth-theme/framework/progress-128.png b/hosts/frame12/framework-plymouth-theme/framework/progress-128.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-128.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-128.png diff --git a/frame12/framework-plymouth-theme/framework/progress-129.png b/hosts/frame12/framework-plymouth-theme/framework/progress-129.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-129.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-129.png diff --git a/frame12/framework-plymouth-theme/framework/progress-13.png b/hosts/frame12/framework-plymouth-theme/framework/progress-13.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-13.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-13.png diff --git a/frame12/framework-plymouth-theme/framework/progress-130.png b/hosts/frame12/framework-plymouth-theme/framework/progress-130.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-130.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-130.png diff --git a/frame12/framework-plymouth-theme/framework/progress-131.png b/hosts/frame12/framework-plymouth-theme/framework/progress-131.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-131.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-131.png diff --git a/frame12/framework-plymouth-theme/framework/progress-132.png b/hosts/frame12/framework-plymouth-theme/framework/progress-132.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-132.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-132.png diff --git a/frame12/framework-plymouth-theme/framework/progress-133.png b/hosts/frame12/framework-plymouth-theme/framework/progress-133.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-133.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-133.png diff --git a/frame12/framework-plymouth-theme/framework/progress-134.png b/hosts/frame12/framework-plymouth-theme/framework/progress-134.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-134.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-134.png diff --git a/frame12/framework-plymouth-theme/framework/progress-135.png b/hosts/frame12/framework-plymouth-theme/framework/progress-135.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-135.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-135.png diff --git a/frame12/framework-plymouth-theme/framework/progress-136.png b/hosts/frame12/framework-plymouth-theme/framework/progress-136.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-136.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-136.png diff --git a/frame12/framework-plymouth-theme/framework/progress-137.png b/hosts/frame12/framework-plymouth-theme/framework/progress-137.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-137.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-137.png diff --git a/frame12/framework-plymouth-theme/framework/progress-138.png b/hosts/frame12/framework-plymouth-theme/framework/progress-138.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-138.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-138.png diff --git a/frame12/framework-plymouth-theme/framework/progress-139.png b/hosts/frame12/framework-plymouth-theme/framework/progress-139.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-139.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-139.png diff --git a/frame12/framework-plymouth-theme/framework/progress-14.png b/hosts/frame12/framework-plymouth-theme/framework/progress-14.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-14.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-14.png diff --git a/frame12/framework-plymouth-theme/framework/progress-140.png b/hosts/frame12/framework-plymouth-theme/framework/progress-140.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-140.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-140.png diff --git a/frame12/framework-plymouth-theme/framework/progress-141.png b/hosts/frame12/framework-plymouth-theme/framework/progress-141.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-141.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-141.png diff --git a/frame12/framework-plymouth-theme/framework/progress-142.png b/hosts/frame12/framework-plymouth-theme/framework/progress-142.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-142.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-142.png diff --git a/frame12/framework-plymouth-theme/framework/progress-143.png b/hosts/frame12/framework-plymouth-theme/framework/progress-143.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-143.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-143.png diff --git a/frame12/framework-plymouth-theme/framework/progress-144.png b/hosts/frame12/framework-plymouth-theme/framework/progress-144.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-144.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-144.png diff --git a/frame12/framework-plymouth-theme/framework/progress-145.png b/hosts/frame12/framework-plymouth-theme/framework/progress-145.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-145.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-145.png diff --git a/frame12/framework-plymouth-theme/framework/progress-146.png b/hosts/frame12/framework-plymouth-theme/framework/progress-146.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-146.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-146.png diff --git a/frame12/framework-plymouth-theme/framework/progress-147.png b/hosts/frame12/framework-plymouth-theme/framework/progress-147.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-147.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-147.png diff --git a/frame12/framework-plymouth-theme/framework/progress-148.png b/hosts/frame12/framework-plymouth-theme/framework/progress-148.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-148.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-148.png diff --git a/frame12/framework-plymouth-theme/framework/progress-149.png b/hosts/frame12/framework-plymouth-theme/framework/progress-149.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-149.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-149.png diff --git a/frame12/framework-plymouth-theme/framework/progress-15.png b/hosts/frame12/framework-plymouth-theme/framework/progress-15.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-15.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-15.png diff --git a/frame12/framework-plymouth-theme/framework/progress-150.png b/hosts/frame12/framework-plymouth-theme/framework/progress-150.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-150.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-150.png diff --git a/frame12/framework-plymouth-theme/framework/progress-151.png b/hosts/frame12/framework-plymouth-theme/framework/progress-151.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-151.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-151.png diff --git a/frame12/framework-plymouth-theme/framework/progress-152.png b/hosts/frame12/framework-plymouth-theme/framework/progress-152.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-152.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-152.png diff --git a/frame12/framework-plymouth-theme/framework/progress-153.png b/hosts/frame12/framework-plymouth-theme/framework/progress-153.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-153.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-153.png diff --git a/frame12/framework-plymouth-theme/framework/progress-154.png b/hosts/frame12/framework-plymouth-theme/framework/progress-154.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-154.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-154.png diff --git a/frame12/framework-plymouth-theme/framework/progress-155.png b/hosts/frame12/framework-plymouth-theme/framework/progress-155.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-155.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-155.png diff --git a/frame12/framework-plymouth-theme/framework/progress-156.png b/hosts/frame12/framework-plymouth-theme/framework/progress-156.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-156.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-156.png diff --git a/frame12/framework-plymouth-theme/framework/progress-157.png b/hosts/frame12/framework-plymouth-theme/framework/progress-157.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-157.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-157.png diff --git a/frame12/framework-plymouth-theme/framework/progress-158.png b/hosts/frame12/framework-plymouth-theme/framework/progress-158.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-158.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-158.png diff --git a/frame12/framework-plymouth-theme/framework/progress-159.png b/hosts/frame12/framework-plymouth-theme/framework/progress-159.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-159.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-159.png diff --git a/frame12/framework-plymouth-theme/framework/progress-16.png b/hosts/frame12/framework-plymouth-theme/framework/progress-16.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-16.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-16.png diff --git a/frame12/framework-plymouth-theme/framework/progress-160.png b/hosts/frame12/framework-plymouth-theme/framework/progress-160.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-160.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-160.png diff --git a/frame12/framework-plymouth-theme/framework/progress-161.png b/hosts/frame12/framework-plymouth-theme/framework/progress-161.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-161.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-161.png diff --git a/frame12/framework-plymouth-theme/framework/progress-162.png b/hosts/frame12/framework-plymouth-theme/framework/progress-162.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-162.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-162.png diff --git a/frame12/framework-plymouth-theme/framework/progress-163.png b/hosts/frame12/framework-plymouth-theme/framework/progress-163.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-163.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-163.png diff --git a/frame12/framework-plymouth-theme/framework/progress-164.png b/hosts/frame12/framework-plymouth-theme/framework/progress-164.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-164.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-164.png diff --git a/frame12/framework-plymouth-theme/framework/progress-165.png b/hosts/frame12/framework-plymouth-theme/framework/progress-165.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-165.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-165.png diff --git a/frame12/framework-plymouth-theme/framework/progress-166.png b/hosts/frame12/framework-plymouth-theme/framework/progress-166.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-166.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-166.png diff --git a/frame12/framework-plymouth-theme/framework/progress-167.png b/hosts/frame12/framework-plymouth-theme/framework/progress-167.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-167.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-167.png diff --git a/frame12/framework-plymouth-theme/framework/progress-168.png b/hosts/frame12/framework-plymouth-theme/framework/progress-168.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-168.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-168.png diff --git a/frame12/framework-plymouth-theme/framework/progress-169.png b/hosts/frame12/framework-plymouth-theme/framework/progress-169.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-169.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-169.png diff --git a/frame12/framework-plymouth-theme/framework/progress-17.png b/hosts/frame12/framework-plymouth-theme/framework/progress-17.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-17.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-17.png diff --git a/frame12/framework-plymouth-theme/framework/progress-170.png b/hosts/frame12/framework-plymouth-theme/framework/progress-170.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-170.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-170.png diff --git a/frame12/framework-plymouth-theme/framework/progress-171.png b/hosts/frame12/framework-plymouth-theme/framework/progress-171.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-171.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-171.png diff --git a/frame12/framework-plymouth-theme/framework/progress-172.png b/hosts/frame12/framework-plymouth-theme/framework/progress-172.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-172.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-172.png diff --git a/frame12/framework-plymouth-theme/framework/progress-173.png b/hosts/frame12/framework-plymouth-theme/framework/progress-173.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-173.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-173.png diff --git a/frame12/framework-plymouth-theme/framework/progress-174.png b/hosts/frame12/framework-plymouth-theme/framework/progress-174.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-174.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-174.png diff --git a/frame12/framework-plymouth-theme/framework/progress-175.png b/hosts/frame12/framework-plymouth-theme/framework/progress-175.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-175.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-175.png diff --git a/frame12/framework-plymouth-theme/framework/progress-176.png b/hosts/frame12/framework-plymouth-theme/framework/progress-176.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-176.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-176.png diff --git a/frame12/framework-plymouth-theme/framework/progress-177.png b/hosts/frame12/framework-plymouth-theme/framework/progress-177.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-177.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-177.png diff --git a/frame12/framework-plymouth-theme/framework/progress-178.png b/hosts/frame12/framework-plymouth-theme/framework/progress-178.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-178.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-178.png diff --git a/frame12/framework-plymouth-theme/framework/progress-179.png b/hosts/frame12/framework-plymouth-theme/framework/progress-179.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-179.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-179.png diff --git a/frame12/framework-plymouth-theme/framework/progress-18.png b/hosts/frame12/framework-plymouth-theme/framework/progress-18.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-18.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-18.png diff --git a/frame12/framework-plymouth-theme/framework/progress-180.png b/hosts/frame12/framework-plymouth-theme/framework/progress-180.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-180.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-180.png diff --git a/frame12/framework-plymouth-theme/framework/progress-181.png b/hosts/frame12/framework-plymouth-theme/framework/progress-181.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-181.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-181.png diff --git a/frame12/framework-plymouth-theme/framework/progress-182.png b/hosts/frame12/framework-plymouth-theme/framework/progress-182.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-182.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-182.png diff --git a/frame12/framework-plymouth-theme/framework/progress-183.png b/hosts/frame12/framework-plymouth-theme/framework/progress-183.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-183.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-183.png diff --git a/frame12/framework-plymouth-theme/framework/progress-184.png b/hosts/frame12/framework-plymouth-theme/framework/progress-184.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-184.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-184.png diff --git a/frame12/framework-plymouth-theme/framework/progress-185.png b/hosts/frame12/framework-plymouth-theme/framework/progress-185.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-185.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-185.png diff --git a/frame12/framework-plymouth-theme/framework/progress-186.png b/hosts/frame12/framework-plymouth-theme/framework/progress-186.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-186.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-186.png diff --git a/frame12/framework-plymouth-theme/framework/progress-187.png b/hosts/frame12/framework-plymouth-theme/framework/progress-187.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-187.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-187.png diff --git a/frame12/framework-plymouth-theme/framework/progress-188.png b/hosts/frame12/framework-plymouth-theme/framework/progress-188.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-188.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-188.png diff --git a/frame12/framework-plymouth-theme/framework/progress-189.png b/hosts/frame12/framework-plymouth-theme/framework/progress-189.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-189.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-189.png diff --git a/frame12/framework-plymouth-theme/framework/progress-19.png b/hosts/frame12/framework-plymouth-theme/framework/progress-19.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-19.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-19.png diff --git a/frame12/framework-plymouth-theme/framework/progress-190.png b/hosts/frame12/framework-plymouth-theme/framework/progress-190.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-190.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-190.png diff --git a/frame12/framework-plymouth-theme/framework/progress-191.png b/hosts/frame12/framework-plymouth-theme/framework/progress-191.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-191.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-191.png diff --git a/frame12/framework-plymouth-theme/framework/progress-192.png b/hosts/frame12/framework-plymouth-theme/framework/progress-192.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-192.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-192.png diff --git a/frame12/framework-plymouth-theme/framework/progress-193.png b/hosts/frame12/framework-plymouth-theme/framework/progress-193.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-193.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-193.png diff --git a/frame12/framework-plymouth-theme/framework/progress-194.png b/hosts/frame12/framework-plymouth-theme/framework/progress-194.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-194.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-194.png diff --git a/frame12/framework-plymouth-theme/framework/progress-195.png b/hosts/frame12/framework-plymouth-theme/framework/progress-195.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-195.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-195.png diff --git a/frame12/framework-plymouth-theme/framework/progress-196.png b/hosts/frame12/framework-plymouth-theme/framework/progress-196.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-196.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-196.png diff --git a/frame12/framework-plymouth-theme/framework/progress-197.png b/hosts/frame12/framework-plymouth-theme/framework/progress-197.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-197.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-197.png diff --git a/frame12/framework-plymouth-theme/framework/progress-198.png b/hosts/frame12/framework-plymouth-theme/framework/progress-198.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-198.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-198.png diff --git a/frame12/framework-plymouth-theme/framework/progress-199.png b/hosts/frame12/framework-plymouth-theme/framework/progress-199.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-199.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-199.png diff --git a/frame12/framework-plymouth-theme/framework/progress-2.png b/hosts/frame12/framework-plymouth-theme/framework/progress-2.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-2.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-2.png diff --git a/frame12/framework-plymouth-theme/framework/progress-20.png b/hosts/frame12/framework-plymouth-theme/framework/progress-20.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-20.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-20.png diff --git a/frame12/framework-plymouth-theme/framework/progress-200.png b/hosts/frame12/framework-plymouth-theme/framework/progress-200.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-200.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-200.png diff --git a/frame12/framework-plymouth-theme/framework/progress-201.png b/hosts/frame12/framework-plymouth-theme/framework/progress-201.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-201.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-201.png diff --git a/frame12/framework-plymouth-theme/framework/progress-202.png b/hosts/frame12/framework-plymouth-theme/framework/progress-202.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-202.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-202.png diff --git a/frame12/framework-plymouth-theme/framework/progress-203.png b/hosts/frame12/framework-plymouth-theme/framework/progress-203.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-203.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-203.png diff --git a/frame12/framework-plymouth-theme/framework/progress-204.png b/hosts/frame12/framework-plymouth-theme/framework/progress-204.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-204.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-204.png diff --git a/frame12/framework-plymouth-theme/framework/progress-205.png b/hosts/frame12/framework-plymouth-theme/framework/progress-205.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-205.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-205.png diff --git a/frame12/framework-plymouth-theme/framework/progress-206.png b/hosts/frame12/framework-plymouth-theme/framework/progress-206.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-206.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-206.png diff --git a/frame12/framework-plymouth-theme/framework/progress-207.png b/hosts/frame12/framework-plymouth-theme/framework/progress-207.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-207.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-207.png diff --git a/frame12/framework-plymouth-theme/framework/progress-208.png b/hosts/frame12/framework-plymouth-theme/framework/progress-208.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-208.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-208.png diff --git a/frame12/framework-plymouth-theme/framework/progress-209.png b/hosts/frame12/framework-plymouth-theme/framework/progress-209.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-209.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-209.png diff --git a/frame12/framework-plymouth-theme/framework/progress-21.png b/hosts/frame12/framework-plymouth-theme/framework/progress-21.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-21.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-21.png diff --git a/frame12/framework-plymouth-theme/framework/progress-210.png b/hosts/frame12/framework-plymouth-theme/framework/progress-210.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-210.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-210.png diff --git a/frame12/framework-plymouth-theme/framework/progress-211.png b/hosts/frame12/framework-plymouth-theme/framework/progress-211.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-211.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-211.png diff --git a/frame12/framework-plymouth-theme/framework/progress-212.png b/hosts/frame12/framework-plymouth-theme/framework/progress-212.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-212.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-212.png diff --git a/frame12/framework-plymouth-theme/framework/progress-213.png b/hosts/frame12/framework-plymouth-theme/framework/progress-213.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-213.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-213.png diff --git a/frame12/framework-plymouth-theme/framework/progress-214.png b/hosts/frame12/framework-plymouth-theme/framework/progress-214.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-214.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-214.png diff --git a/frame12/framework-plymouth-theme/framework/progress-215.png b/hosts/frame12/framework-plymouth-theme/framework/progress-215.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-215.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-215.png diff --git a/frame12/framework-plymouth-theme/framework/progress-216.png b/hosts/frame12/framework-plymouth-theme/framework/progress-216.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-216.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-216.png diff --git a/frame12/framework-plymouth-theme/framework/progress-217.png b/hosts/frame12/framework-plymouth-theme/framework/progress-217.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-217.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-217.png diff --git a/frame12/framework-plymouth-theme/framework/progress-218.png b/hosts/frame12/framework-plymouth-theme/framework/progress-218.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-218.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-218.png diff --git a/frame12/framework-plymouth-theme/framework/progress-219.png b/hosts/frame12/framework-plymouth-theme/framework/progress-219.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-219.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-219.png diff --git a/frame12/framework-plymouth-theme/framework/progress-22.png b/hosts/frame12/framework-plymouth-theme/framework/progress-22.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-22.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-22.png diff --git a/frame12/framework-plymouth-theme/framework/progress-220.png b/hosts/frame12/framework-plymouth-theme/framework/progress-220.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-220.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-220.png diff --git a/frame12/framework-plymouth-theme/framework/progress-221.png b/hosts/frame12/framework-plymouth-theme/framework/progress-221.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-221.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-221.png diff --git a/frame12/framework-plymouth-theme/framework/progress-222.png b/hosts/frame12/framework-plymouth-theme/framework/progress-222.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-222.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-222.png diff --git a/frame12/framework-plymouth-theme/framework/progress-223.png b/hosts/frame12/framework-plymouth-theme/framework/progress-223.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-223.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-223.png diff --git a/frame12/framework-plymouth-theme/framework/progress-224.png b/hosts/frame12/framework-plymouth-theme/framework/progress-224.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-224.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-224.png diff --git a/frame12/framework-plymouth-theme/framework/progress-225.png b/hosts/frame12/framework-plymouth-theme/framework/progress-225.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-225.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-225.png diff --git a/frame12/framework-plymouth-theme/framework/progress-226.png b/hosts/frame12/framework-plymouth-theme/framework/progress-226.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-226.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-226.png diff --git a/frame12/framework-plymouth-theme/framework/progress-227.png b/hosts/frame12/framework-plymouth-theme/framework/progress-227.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-227.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-227.png diff --git a/frame12/framework-plymouth-theme/framework/progress-228.png b/hosts/frame12/framework-plymouth-theme/framework/progress-228.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-228.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-228.png diff --git a/frame12/framework-plymouth-theme/framework/progress-229.png b/hosts/frame12/framework-plymouth-theme/framework/progress-229.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-229.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-229.png diff --git a/frame12/framework-plymouth-theme/framework/progress-23.png b/hosts/frame12/framework-plymouth-theme/framework/progress-23.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-23.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-23.png diff --git a/frame12/framework-plymouth-theme/framework/progress-230.png b/hosts/frame12/framework-plymouth-theme/framework/progress-230.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-230.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-230.png diff --git a/frame12/framework-plymouth-theme/framework/progress-231.png b/hosts/frame12/framework-plymouth-theme/framework/progress-231.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-231.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-231.png diff --git a/frame12/framework-plymouth-theme/framework/progress-24.png b/hosts/frame12/framework-plymouth-theme/framework/progress-24.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-24.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-24.png diff --git a/frame12/framework-plymouth-theme/framework/progress-25.png b/hosts/frame12/framework-plymouth-theme/framework/progress-25.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-25.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-25.png diff --git a/frame12/framework-plymouth-theme/framework/progress-26.png b/hosts/frame12/framework-plymouth-theme/framework/progress-26.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-26.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-26.png diff --git a/frame12/framework-plymouth-theme/framework/progress-27.png b/hosts/frame12/framework-plymouth-theme/framework/progress-27.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-27.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-27.png diff --git a/frame12/framework-plymouth-theme/framework/progress-28.png b/hosts/frame12/framework-plymouth-theme/framework/progress-28.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-28.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-28.png diff --git a/frame12/framework-plymouth-theme/framework/progress-29.png b/hosts/frame12/framework-plymouth-theme/framework/progress-29.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-29.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-29.png diff --git a/frame12/framework-plymouth-theme/framework/progress-3.png b/hosts/frame12/framework-plymouth-theme/framework/progress-3.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-3.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-3.png diff --git a/frame12/framework-plymouth-theme/framework/progress-30.png b/hosts/frame12/framework-plymouth-theme/framework/progress-30.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-30.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-30.png diff --git a/frame12/framework-plymouth-theme/framework/progress-31.png b/hosts/frame12/framework-plymouth-theme/framework/progress-31.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-31.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-31.png diff --git a/frame12/framework-plymouth-theme/framework/progress-32.png b/hosts/frame12/framework-plymouth-theme/framework/progress-32.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-32.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-32.png diff --git a/frame12/framework-plymouth-theme/framework/progress-33.png b/hosts/frame12/framework-plymouth-theme/framework/progress-33.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-33.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-33.png diff --git a/frame12/framework-plymouth-theme/framework/progress-34.png b/hosts/frame12/framework-plymouth-theme/framework/progress-34.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-34.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-34.png diff --git a/frame12/framework-plymouth-theme/framework/progress-35.png b/hosts/frame12/framework-plymouth-theme/framework/progress-35.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-35.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-35.png diff --git a/frame12/framework-plymouth-theme/framework/progress-36.png b/hosts/frame12/framework-plymouth-theme/framework/progress-36.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-36.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-36.png diff --git a/frame12/framework-plymouth-theme/framework/progress-37.png b/hosts/frame12/framework-plymouth-theme/framework/progress-37.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-37.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-37.png diff --git a/frame12/framework-plymouth-theme/framework/progress-38.png b/hosts/frame12/framework-plymouth-theme/framework/progress-38.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-38.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-38.png diff --git a/frame12/framework-plymouth-theme/framework/progress-39.png b/hosts/frame12/framework-plymouth-theme/framework/progress-39.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-39.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-39.png diff --git a/frame12/framework-plymouth-theme/framework/progress-4.png b/hosts/frame12/framework-plymouth-theme/framework/progress-4.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-4.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-4.png diff --git a/frame12/framework-plymouth-theme/framework/progress-40.png b/hosts/frame12/framework-plymouth-theme/framework/progress-40.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-40.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-40.png diff --git a/frame12/framework-plymouth-theme/framework/progress-41.png b/hosts/frame12/framework-plymouth-theme/framework/progress-41.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-41.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-41.png diff --git a/frame12/framework-plymouth-theme/framework/progress-42.png b/hosts/frame12/framework-plymouth-theme/framework/progress-42.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-42.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-42.png diff --git a/frame12/framework-plymouth-theme/framework/progress-43.png b/hosts/frame12/framework-plymouth-theme/framework/progress-43.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-43.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-43.png diff --git a/frame12/framework-plymouth-theme/framework/progress-44.png b/hosts/frame12/framework-plymouth-theme/framework/progress-44.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-44.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-44.png diff --git a/frame12/framework-plymouth-theme/framework/progress-45.png b/hosts/frame12/framework-plymouth-theme/framework/progress-45.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-45.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-45.png diff --git a/frame12/framework-plymouth-theme/framework/progress-46.png b/hosts/frame12/framework-plymouth-theme/framework/progress-46.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-46.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-46.png diff --git a/frame12/framework-plymouth-theme/framework/progress-47.png b/hosts/frame12/framework-plymouth-theme/framework/progress-47.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-47.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-47.png diff --git a/frame12/framework-plymouth-theme/framework/progress-48.png b/hosts/frame12/framework-plymouth-theme/framework/progress-48.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-48.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-48.png diff --git a/frame12/framework-plymouth-theme/framework/progress-49.png b/hosts/frame12/framework-plymouth-theme/framework/progress-49.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-49.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-49.png diff --git a/frame12/framework-plymouth-theme/framework/progress-5.png b/hosts/frame12/framework-plymouth-theme/framework/progress-5.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-5.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-5.png diff --git a/frame12/framework-plymouth-theme/framework/progress-50.png b/hosts/frame12/framework-plymouth-theme/framework/progress-50.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-50.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-50.png diff --git a/frame12/framework-plymouth-theme/framework/progress-51.png b/hosts/frame12/framework-plymouth-theme/framework/progress-51.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-51.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-51.png diff --git a/frame12/framework-plymouth-theme/framework/progress-52.png b/hosts/frame12/framework-plymouth-theme/framework/progress-52.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-52.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-52.png diff --git a/frame12/framework-plymouth-theme/framework/progress-53.png b/hosts/frame12/framework-plymouth-theme/framework/progress-53.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-53.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-53.png diff --git a/frame12/framework-plymouth-theme/framework/progress-54.png b/hosts/frame12/framework-plymouth-theme/framework/progress-54.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-54.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-54.png diff --git a/frame12/framework-plymouth-theme/framework/progress-55.png b/hosts/frame12/framework-plymouth-theme/framework/progress-55.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-55.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-55.png diff --git a/frame12/framework-plymouth-theme/framework/progress-56.png b/hosts/frame12/framework-plymouth-theme/framework/progress-56.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-56.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-56.png diff --git a/frame12/framework-plymouth-theme/framework/progress-57.png b/hosts/frame12/framework-plymouth-theme/framework/progress-57.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-57.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-57.png diff --git a/frame12/framework-plymouth-theme/framework/progress-58.png b/hosts/frame12/framework-plymouth-theme/framework/progress-58.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-58.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-58.png diff --git a/frame12/framework-plymouth-theme/framework/progress-59.png b/hosts/frame12/framework-plymouth-theme/framework/progress-59.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-59.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-59.png diff --git a/frame12/framework-plymouth-theme/framework/progress-6.png b/hosts/frame12/framework-plymouth-theme/framework/progress-6.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-6.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-6.png diff --git a/frame12/framework-plymouth-theme/framework/progress-60.png b/hosts/frame12/framework-plymouth-theme/framework/progress-60.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-60.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-60.png diff --git a/frame12/framework-plymouth-theme/framework/progress-61.png b/hosts/frame12/framework-plymouth-theme/framework/progress-61.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-61.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-61.png diff --git a/frame12/framework-plymouth-theme/framework/progress-62.png b/hosts/frame12/framework-plymouth-theme/framework/progress-62.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-62.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-62.png diff --git a/frame12/framework-plymouth-theme/framework/progress-63.png b/hosts/frame12/framework-plymouth-theme/framework/progress-63.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-63.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-63.png diff --git a/frame12/framework-plymouth-theme/framework/progress-64.png b/hosts/frame12/framework-plymouth-theme/framework/progress-64.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-64.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-64.png diff --git a/frame12/framework-plymouth-theme/framework/progress-65.png b/hosts/frame12/framework-plymouth-theme/framework/progress-65.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-65.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-65.png diff --git a/frame12/framework-plymouth-theme/framework/progress-66.png b/hosts/frame12/framework-plymouth-theme/framework/progress-66.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-66.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-66.png diff --git a/frame12/framework-plymouth-theme/framework/progress-67.png b/hosts/frame12/framework-plymouth-theme/framework/progress-67.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-67.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-67.png diff --git a/frame12/framework-plymouth-theme/framework/progress-68.png b/hosts/frame12/framework-plymouth-theme/framework/progress-68.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-68.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-68.png diff --git a/frame12/framework-plymouth-theme/framework/progress-69.png b/hosts/frame12/framework-plymouth-theme/framework/progress-69.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-69.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-69.png diff --git a/frame12/framework-plymouth-theme/framework/progress-7.png b/hosts/frame12/framework-plymouth-theme/framework/progress-7.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-7.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-7.png diff --git a/frame12/framework-plymouth-theme/framework/progress-70.png b/hosts/frame12/framework-plymouth-theme/framework/progress-70.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-70.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-70.png diff --git a/frame12/framework-plymouth-theme/framework/progress-71.png b/hosts/frame12/framework-plymouth-theme/framework/progress-71.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-71.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-71.png diff --git a/frame12/framework-plymouth-theme/framework/progress-72.png b/hosts/frame12/framework-plymouth-theme/framework/progress-72.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-72.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-72.png diff --git a/frame12/framework-plymouth-theme/framework/progress-73.png b/hosts/frame12/framework-plymouth-theme/framework/progress-73.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-73.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-73.png diff --git a/frame12/framework-plymouth-theme/framework/progress-74.png b/hosts/frame12/framework-plymouth-theme/framework/progress-74.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-74.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-74.png diff --git a/frame12/framework-plymouth-theme/framework/progress-75.png b/hosts/frame12/framework-plymouth-theme/framework/progress-75.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-75.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-75.png diff --git a/frame12/framework-plymouth-theme/framework/progress-76.png b/hosts/frame12/framework-plymouth-theme/framework/progress-76.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-76.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-76.png diff --git a/frame12/framework-plymouth-theme/framework/progress-77.png b/hosts/frame12/framework-plymouth-theme/framework/progress-77.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-77.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-77.png diff --git a/frame12/framework-plymouth-theme/framework/progress-78.png b/hosts/frame12/framework-plymouth-theme/framework/progress-78.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-78.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-78.png diff --git a/frame12/framework-plymouth-theme/framework/progress-79.png b/hosts/frame12/framework-plymouth-theme/framework/progress-79.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-79.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-79.png diff --git a/frame12/framework-plymouth-theme/framework/progress-8.png b/hosts/frame12/framework-plymouth-theme/framework/progress-8.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-8.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-8.png diff --git a/frame12/framework-plymouth-theme/framework/progress-80.png b/hosts/frame12/framework-plymouth-theme/framework/progress-80.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-80.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-80.png diff --git a/frame12/framework-plymouth-theme/framework/progress-81.png b/hosts/frame12/framework-plymouth-theme/framework/progress-81.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-81.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-81.png diff --git a/frame12/framework-plymouth-theme/framework/progress-82.png b/hosts/frame12/framework-plymouth-theme/framework/progress-82.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-82.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-82.png diff --git a/frame12/framework-plymouth-theme/framework/progress-83.png b/hosts/frame12/framework-plymouth-theme/framework/progress-83.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-83.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-83.png diff --git a/frame12/framework-plymouth-theme/framework/progress-84.png b/hosts/frame12/framework-plymouth-theme/framework/progress-84.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-84.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-84.png diff --git a/frame12/framework-plymouth-theme/framework/progress-85.png b/hosts/frame12/framework-plymouth-theme/framework/progress-85.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-85.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-85.png diff --git a/frame12/framework-plymouth-theme/framework/progress-86.png b/hosts/frame12/framework-plymouth-theme/framework/progress-86.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-86.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-86.png diff --git a/frame12/framework-plymouth-theme/framework/progress-87.png b/hosts/frame12/framework-plymouth-theme/framework/progress-87.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-87.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-87.png diff --git a/frame12/framework-plymouth-theme/framework/progress-88.png b/hosts/frame12/framework-plymouth-theme/framework/progress-88.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-88.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-88.png diff --git a/frame12/framework-plymouth-theme/framework/progress-89.png b/hosts/frame12/framework-plymouth-theme/framework/progress-89.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-89.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-89.png diff --git a/frame12/framework-plymouth-theme/framework/progress-9.png b/hosts/frame12/framework-plymouth-theme/framework/progress-9.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-9.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-9.png diff --git a/frame12/framework-plymouth-theme/framework/progress-90.png b/hosts/frame12/framework-plymouth-theme/framework/progress-90.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-90.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-90.png diff --git a/frame12/framework-plymouth-theme/framework/progress-91.png b/hosts/frame12/framework-plymouth-theme/framework/progress-91.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-91.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-91.png diff --git a/frame12/framework-plymouth-theme/framework/progress-92.png b/hosts/frame12/framework-plymouth-theme/framework/progress-92.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-92.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-92.png diff --git a/frame12/framework-plymouth-theme/framework/progress-93.png b/hosts/frame12/framework-plymouth-theme/framework/progress-93.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-93.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-93.png diff --git a/frame12/framework-plymouth-theme/framework/progress-94.png b/hosts/frame12/framework-plymouth-theme/framework/progress-94.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-94.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-94.png diff --git a/frame12/framework-plymouth-theme/framework/progress-95.png b/hosts/frame12/framework-plymouth-theme/framework/progress-95.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-95.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-95.png diff --git a/frame12/framework-plymouth-theme/framework/progress-96.png b/hosts/frame12/framework-plymouth-theme/framework/progress-96.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-96.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-96.png diff --git a/frame12/framework-plymouth-theme/framework/progress-97.png b/hosts/frame12/framework-plymouth-theme/framework/progress-97.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-97.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-97.png diff --git a/frame12/framework-plymouth-theme/framework/progress-98.png b/hosts/frame12/framework-plymouth-theme/framework/progress-98.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-98.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-98.png diff --git a/frame12/framework-plymouth-theme/framework/progress-99.png b/hosts/frame12/framework-plymouth-theme/framework/progress-99.png similarity index 100% rename from frame12/framework-plymouth-theme/framework/progress-99.png rename to hosts/frame12/framework-plymouth-theme/framework/progress-99.png diff --git a/frame12/linked-dotfiles/niri/bg.png b/hosts/frame12/linked-dotfiles/niri/bg.png similarity index 100% rename from frame12/linked-dotfiles/niri/bg.png rename to hosts/frame12/linked-dotfiles/niri/bg.png diff --git a/frame12/linked-dotfiles/niri/config.kdl b/hosts/frame12/linked-dotfiles/niri/config.kdl similarity index 100% rename from frame12/linked-dotfiles/niri/config.kdl rename to hosts/frame12/linked-dotfiles/niri/config.kdl diff --git a/frame12/modules/home-manager/home.nix b/hosts/frame12/modules/home-manager/home.nix similarity index 57% rename from frame12/modules/home-manager/home.nix rename to hosts/frame12/modules/home-manager/home.nix index ad52d3d..71d6603 100644 --- a/frame12/modules/home-manager/home.nix +++ b/hosts/frame12/modules/home-manager/home.nix @@ -7,9 +7,6 @@ ... }: let - userName = "nate"; - fullName = "Nate Anderson"; - email = "n8r@tuta.io"; unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; @@ -17,36 +14,51 @@ let in { imports = [ - ../../../shared/modules/home-manager/programs.nix - ../../../shared/modules/home-manager/git-autosync.nix - ../../../shared/modules/home-manager/noctalia.nix - ../niri/niri_home.nix + ../../../../shared/modules/home-manager/base-home.nix ]; - home.username = userName; - home.homeDirectory = "/home/${userName}"; - programs.home-manager.enable = true; - home.stateVersion = "25.05"; # Please read the comment before changing. - - sharedPrograms.enable = true; - fonts.fontconfig.enable = true; - - # Stylix auto-theming - applies to all programs..enable apps - stylix = { - autoEnable = true; - - # Must tell which profile - targets.firefox = { - profileNames = [ "default" ]; - colorTheme.enable = true; # use firefox color - firefoxGnomeTheme.enable = true; - }; + baseHome = { + enable = true; + userName = "nate"; + fullName = "Nate Anderson"; + email = "n8r@tuta.io"; + stateVersion = "25.05"; + hostDir = "frame12"; }; - # Enable niri home configuration - nirihome = { + # Additional zsh config — direnv hook + yt-audio function + programs.zsh.initContent = '' + eval "$(direnv hook zsh)" + + yt-audio() { + nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3" + } + ''; + # Additional shell aliases beyond base + programs.zsh.shellAliases = { + grep = "rg"; + ccat = "cat"; + catp = "bat --paging=never -p"; + }; + programs.zsh.profileExtra = '' + export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share + ''; + + # Additional programs + programs.direnv = { enable = true; - homePackages = [ ]; + enableZshIntegration = true; + nix-direnv.enable = true; + }; + programs.delta = { + enable = true; + enableGitIntegration = true; + }; + + # KDEConnect (HM-level indicator) + services.kdeconnect = { + enable = true; + indicator = true; }; # Additional user packages @@ -65,22 +77,13 @@ in openscad-lsp vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp ltex-ls - python313Packages.python-lsp-server ### Misc usbutils - fw-ectool # framework ectool for key remapping + fw-ectool # Colemak-DH EC remap scripts - # Positions verified through testing on Framework 12 - # Format: ectool raw 0x3E0C d1,d1,bROW,bCOL,wSCANCODE (writeShellScriptBin "colemak-dh" '' # Apply Colemak-DH layout via EC - # Scancodes: a=1c b=32 c=21 d=23 e=24 f=2b g=34 h=33 i=43 j=3b k=42 l=4b - # m=3a n=31 o=44 p=4d q=15 r=2d s=1b t=2c u=3c v=2a w=1d x=22 - # y=35 z=1a ;=4c - # Matrix positions verified via FRAME12_KEY_MATRIX.md scan - - # Check if already remapped by reading position (7,8) - should be 0x2b (f) if remapped CURRENT=$(sudo ${fw-ectool}/bin/ectool raw 0x3E0C d1,d0,b7,b8,w0 2>/dev/null | grep '|' | head -1 | awk '{print $11}') if [ "$CURRENT" = "2b" ]; then echo "Colemak-DH already active, skipping." @@ -122,13 +125,6 @@ in (writeShellScriptBin "qwerty" '' # Restore QWERTY layout via EC - # Uses same positions as colemak-dh but restores original scancodes - # Scancodes: a=1c b=32 c=21 d=23 e=24 f=2b g=34 h=33 i=43 j=3b k=42 l=4b - # m=3a n=31 o=44 p=4d q=15 r=2d s=1b t=2c u=3c v=2a w=1d x=22 - # y=35 z=1a ;=4c - # Matrix positions verified via FRAME12_KEY_MATRIX.md scan - - # Check if already QWERTY by reading position (7,8) - should be 0x24 (e) if QWERTY CURRENT=$(sudo ${fw-ectool}/bin/ectool raw 0x3E0C d1,d0,b7,b8,w0 2>/dev/null | grep '|' | head -1 | awk '{print $11}') if [ "$CURRENT" = "24" ]; then echo "QWERTY already active, skipping." @@ -174,13 +170,10 @@ in duf dust fd - lsd ripgrep tre-command gtop - htop # kept alongside btop in programs.nix neofetch - unzip nmap gnupg pinentry-tty @@ -199,40 +192,15 @@ in yubioath-flutter # - # Style + # Style — additional fonts # - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - # Additional fonts (main fonts managed by Stylix) unstable.nerd-fonts.hurmit unstable.nerd-fonts.overpass recursive ]; - # - # Dotfiles - # - - # Static symlinks + # Local dotfiles (host-specific, override shared) home.file = lib.mkMerge [ - # Shared dotfiles - ( - let - sharedDotfilesPath = ../../../shared/dotfiles; - in - if builtins.pathExists sharedDotfilesPath then - builtins.listToAttrs ( - map (name: { - name = "${config.xdg.configHome}/${name}"; - value = { - source = lib.mkDefault (sharedDotfilesPath + "/${name}"); - }; - }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)) - ) - else - { } - ) - # Add local dotfiles, overriding from local over shared ( let localDotfilesPath = ../../dotfiles; @@ -251,13 +219,6 @@ in ) ]; - # Active symlinks - xdg.configFile = { - # Active linked dotfiles - "niri".source = - config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/frame12/linked-dotfiles/niri"; - }; - # Override Flatpak Steam to disable GPU acceleration (fixes black window on Niri) xdg.desktopEntries."com.valvesoftware.Steam" = { name = "Steam"; @@ -271,124 +232,13 @@ in ]; }; - home.sessionVariables = { - EDITOR = "hx"; - # For electron apps - NIXOS_OZONE_WL = "1"; - }; - - # Git setup - programs.git = { - enable = true; - settings = { - user.name = fullName; - user.email = email; - init = { - defaultBranch = "main"; - }; - pull = { - ff = "only"; - }; - merge = { - conflictStyle = "zdiff3"; - }; - push = { - autoSetupRemote = "true"; - }; - }; - }; - - programs = { - direnv = { - enable = true; - enableZshIntegration = true; # see note on other shells below - nix-direnv.enable = true; - }; - - bash.enable = true; # see note on other shells below - delta = { - enable = true; - enableGitIntegration = true; - }; - }; - - # enable saving ssh secrets (needed for go mod installing private packages) - services.gnome-keyring.enable = true; - services.gnome-keyring.components = [ - "ssh" - "secrets" - ]; - - # Zsh setup - programs.zsh = { - enable = true; - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - theme = "half-life"; - }; - initContent = '' - # History - HISTSIZE=5000 - SAVEHIST=5000 - setopt SHARE_HISTORY - setopt APPEND_HISTORY - - # integrate ssh-agent from gnome keyring - export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh - - eval "$(direnv hook zsh)" - - yt-audio() { - nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3" - } - - # Better Unix Aliases - alias ls="lsd" - alias l="lsd --almost-all --long" - alias llm="lsd --timesort --long" - alias lS="lsd --oneline --classic" - alias lt="lsd --tree --depth=2" - alias grep="rg" - alias cat="bat --paging=never" - alias rm="rm -i" - ''; - shellAliases = { - ls = "lsd"; - l = "lsd --almost-all --long"; - llm = "lsd --timesort --long"; - lS = "lsd --oneline --classic"; - lt = "lsd --tree --depth=2"; - cat = "bat --paging=never"; - ccat = "cat"; - catp = "bat --paging=never -p"; - rm = "rm -i"; - }; - profileExtra = '' - export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share - ''; - syntaxHighlighting = { - enable = true; - }; - }; - - # Stylix handles Qt and GTK theming - - services.kdeconnect = { - enable = true; - indicator = true; - }; - - # Enable bluetooth headphone controls - services.mpris-proxy.enable = true; - # Git autosync for star-command services.git-autosync = { enable = true; repos.star-command = { - path = "/home/${userName}/source/star-command"; - gitName = fullName; - gitEmail = email; + path = "/home/nate/source/star-command"; + gitName = "Nate Anderson"; + gitEmail = "n8r@tuta.io"; }; }; @@ -420,144 +270,23 @@ in autoShowDelay = 150; widgets = { left = [ - { - icon = "rocket"; - iconColor = "none"; - id = "Launcher"; - } - { - clockColor = "none"; - customFont = ""; - formatHorizontal = "HH:mm ddd, MMM dd"; - formatVertical = "HH mm - dd MM"; - id = "Clock"; - tooltipFormat = "HH:mm ddd, MMM dd"; - useCustomFont = false; - } - { - id = "plugin:weekly-calendar"; - } - { - compactMode = true; - diskPath = "/"; - iconColor = "none"; - id = "SystemMonitor"; - showCpuFreq = false; - showCpuTemp = true; - showCpuUsage = true; - showDiskAvailable = false; - showDiskUsage = false; - showDiskUsageAsPercent = false; - showGpuTemp = false; - showLoadAverage = false; - showMemoryAsPercent = false; - showMemoryUsage = true; - showNetworkStats = false; - showSwapUsage = false; - textColor = "none"; - useMonospaceFont = true; - } - { - colorizeIcons = false; - hideMode = "hidden"; - id = "ActiveWindow"; - maxWidth = 145; - scrollingMode = "hover"; - showIcon = true; - textColor = "none"; - useFixedWidth = false; - } - { - compactMode = false; - compactShowAlbumArt = true; - compactShowVisualizer = false; - hideMode = "hidden"; - hideWhenIdle = false; - id = "MediaMini"; - maxWidth = 145; - panelShowAlbumArt = true; - panelShowVisualizer = true; - scrollingMode = "hover"; - showAlbumArt = true; - showArtistFirst = true; - showProgressRing = true; - showVisualizer = false; - textColor = "none"; - useFixedWidth = false; - visualizerType = "linear"; - } + { icon = "rocket"; iconColor = "none"; id = "Launcher"; } + { clockColor = "none"; customFont = ""; formatHorizontal = "HH:mm ddd, MMM dd"; formatVertical = "HH mm - dd MM"; id = "Clock"; tooltipFormat = "HH:mm ddd, MMM dd"; useCustomFont = false; } + { id = "plugin:weekly-calendar"; } + { compactMode = true; diskPath = "/"; iconColor = "none"; id = "SystemMonitor"; showCpuFreq = false; showCpuTemp = true; showCpuUsage = true; showDiskAvailable = false; showDiskUsage = false; showDiskUsageAsPercent = false; showGpuTemp = false; showLoadAverage = false; showMemoryAsPercent = false; showMemoryUsage = true; showNetworkStats = false; showSwapUsage = false; textColor = "none"; useMonospaceFont = true; } + { colorizeIcons = false; hideMode = "hidden"; id = "ActiveWindow"; maxWidth = 145; scrollingMode = "hover"; showIcon = true; textColor = "none"; useFixedWidth = false; } + { compactMode = false; compactShowAlbumArt = true; compactShowVisualizer = false; hideMode = "hidden"; hideWhenIdle = false; id = "MediaMini"; maxWidth = 145; panelShowAlbumArt = true; panelShowVisualizer = true; scrollingMode = "hover"; showAlbumArt = true; showArtistFirst = true; showProgressRing = true; showVisualizer = false; textColor = "none"; useFixedWidth = false; visualizerType = "linear"; } ]; center = [ - { - characterCount = 2; - colorizeIcons = false; - emptyColor = "secondary"; - enableScrollWheel = true; - focusedColor = "primary"; - followFocusedScreen = false; - groupedBorderOpacity = 1.0; - hideUnoccupied = false; - iconScale = 0.8; - id = "Workspace"; - labelMode = "index"; - occupiedColor = "secondary"; - pillSize = 0.6; - reverseScroll = false; - showApplications = false; - showBadge = true; - showLabelsOnlyWhenOccupied = true; - unfocusedIconsOpacity = 1.0; - } + { characterCount = 2; colorizeIcons = false; emptyColor = "secondary"; enableScrollWheel = true; focusedColor = "primary"; followFocusedScreen = false; groupedBorderOpacity = 1.0; hideUnoccupied = false; iconScale = 0.8; id = "Workspace"; labelMode = "index"; occupiedColor = "secondary"; pillSize = 0.6; reverseScroll = false; showApplications = false; showBadge = true; showLabelsOnlyWhenOccupied = true; unfocusedIconsOpacity = 1.0; } ]; right = [ - { - blacklist = [ ]; - chevronColor = "none"; - colorizeIcons = false; - drawerEnabled = true; - hidePassive = false; - id = "Tray"; - pinned = [ ]; - } - { - hideWhenZero = false; - hideWhenZeroUnread = false; - iconColor = "none"; - id = "NotificationHistory"; - showUnreadBadge = true; - unreadBadgeColor = "primary"; - } - { - deviceNativePath = "__default__"; - displayMode = "graphic-clean"; - hideIfIdle = false; - hideIfNotDetected = true; - id = "Battery"; - showNoctaliaPerformance = false; - showPowerProfiles = false; - } - { - displayMode = "onhover"; - iconColor = "none"; - id = "Volume"; - middleClickCommand = "pwvucontrol || pavucontrol"; - textColor = "none"; - } - { - displayMode = "onhover"; - iconColor = "none"; - id = "Brightness"; - textColor = "none"; - } - { - colorizeDistroLogo = false; - colorizeSystemIcon = "none"; - customIconPath = ""; - enableColorization = false; - icon = "noctalia"; - id = "ControlCenter"; - useDistroLogo = false; - } + { blacklist = [ ]; chevronColor = "none"; colorizeIcons = false; drawerEnabled = true; hidePassive = false; id = "Tray"; pinned = [ ]; } + { hideWhenZero = false; hideWhenZeroUnread = false; iconColor = "none"; id = "NotificationHistory"; showUnreadBadge = true; unreadBadgeColor = "primary"; } + { deviceNativePath = "__default__"; displayMode = "graphic-clean"; hideIfIdle = false; hideIfNotDetected = true; id = "Battery"; showNoctaliaPerformance = false; showPowerProfiles = false; } + { displayMode = "onhover"; iconColor = "none"; id = "Volume"; middleClickCommand = "pwvucontrol || pavucontrol"; textColor = "none"; } + { displayMode = "onhover"; iconColor = "none"; id = "Brightness"; textColor = "none"; } + { colorizeDistroLogo = false; colorizeSystemIcon = "none"; customIconPath = ""; enableColorization = false; icon = "noctalia"; id = "ControlCenter"; useDistroLogo = false; } ]; }; screenOverrides = [ ]; @@ -597,24 +326,12 @@ in lockScreenBlur = 0; lockScreenTint = 0; keybinds = { - keyUp = [ - "Up" - ]; - keyDown = [ - "Down" - ]; - keyLeft = [ - "Left" - ]; - keyRight = [ - "Right" - ]; - keyEnter = [ - "Return" - ]; - keyEscape = [ - "Esc" - ]; + keyUp = [ "Up" ]; + keyDown = [ "Down" ]; + keyLeft = [ "Left" ]; + keyRight = [ "Right" ]; + keyEnter = [ "Return" ]; + keyEscape = [ "Esc" ]; }; }; ui = { @@ -648,18 +365,9 @@ in }; calendar = { cards = [ - { - enabled = true; - id = "calendar-header-card"; - } - { - enabled = true; - id = "calendar-month-card"; - } - { - enabled = true; - id = "weather-card"; - } + { enabled = true; id = "calendar-header-card"; } + { enabled = true; id = "calendar-month-card"; } + { enabled = true; id = "weather-card"; } ]; }; wallpaper = { @@ -728,59 +436,25 @@ in diskPath = "/"; shortcuts = { left = [ - { - id = "Network"; - } - { - id = "Bluetooth"; - } - { - id = "WallpaperSelector"; - } - { - id = "NoctaliaPerformance"; - } + { id = "Network"; } + { id = "Bluetooth"; } + { id = "WallpaperSelector"; } + { id = "NoctaliaPerformance"; } ]; right = [ - { - id = "Notifications"; - } - { - id = "PowerProfile"; - } - { - id = "KeepAwake"; - } - { - id = "NightLight"; - } + { id = "Notifications"; } + { id = "PowerProfile"; } + { id = "KeepAwake"; } + { id = "NightLight"; } ]; }; cards = [ - { - enabled = true; - id = "profile-card"; - } - { - enabled = true; - id = "shortcuts-card"; - } - { - enabled = true; - id = "audio-card"; - } - { - enabled = false; - id = "brightness-card"; - } - { - enabled = true; - id = "weather-card"; - } - { - enabled = true; - id = "media-sysmon-card"; - } + { enabled = true; id = "profile-card"; } + { enabled = true; id = "shortcuts-card"; } + { enabled = true; id = "audio-card"; } + { enabled = false; id = "brightness-card"; } + { enabled = true; id = "weather-card"; } + { enabled = true; id = "media-sysmon-card"; } ]; }; systemMonitor = { @@ -845,48 +519,12 @@ in largeButtonsLayout = "single-row"; showNumberLabels = true; powerOptions = [ - { - action = "lock"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "suspend"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "hibernate"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "reboot"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "logout"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "shutdown"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } + { action = "lock"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "suspend"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "hibernate"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "reboot"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "logout"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "shutdown"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } ]; }; notifications = { @@ -899,11 +537,7 @@ in lowUrgencyDuration = 3; normalUrgencyDuration = 8; criticalUrgencyDuration = 15; - saveToHistory = { - low = true; - normal = true; - critical = true; - }; + saveToHistory = { low = true; normal = true; critical = true; }; sounds = { enabled = false; volume = 0.5; @@ -923,12 +557,7 @@ in autoHideMs = 2000; overlayLayer = true; backgroundOpacity = 1.0; - enabledTypes = [ - 0 - 1 - 2 - 3 - ]; + enabledTypes = [ 0 1 2 3 ]; monitors = [ ]; }; audio = { diff --git a/frame12/nixos/hardware-configuration.nix b/hosts/frame12/nixos/hardware-configuration.nix similarity index 100% rename from frame12/nixos/hardware-configuration.nix rename to hosts/frame12/nixos/hardware-configuration.nix diff --git a/frame12/wallpaper.png b/hosts/frame12/wallpaper.png similarity index 100% rename from frame12/wallpaper.png rename to hosts/frame12/wallpaper.png diff --git a/hosts/jaci/default.nix b/hosts/jaci/default.nix new file mode 100644 index 0000000..a5b7f1a --- /dev/null +++ b/hosts/jaci/default.nix @@ -0,0 +1,124 @@ +{ config, lib, inputs, pkgs, timeZone, ... }: +let + deskCfg = config.deskCfg; +in +{ + imports = [ + inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel + ./nixos/hardware-configuration.nix + ../../shared/modules/desktop/base.nix + ../../shared/modules/desktop/stylix.nix + ../../shared/modules/desktop/silent-boot.nix + ../../shared/modules/desktop/greetd.nix + ../../shared/modules/wm/niri.nix + ]; + + deskCfg = { + userName = "jaci"; + hostName = "jaci"; + fullName = "Jaci Anderson"; + de = "niri"; + installGaming = true; + flakePath = "/home/jaci/nixos"; + }; + + # Limit the number of generations to keep + boot.loader.systemd-boot.configurationLimit = 5; + boot.kernelPackages = pkgs.linuxPackages_latest; + + # Enable systemd in initrd for better LUKS unlocking with Plymouth + boot.initrd.systemd.enable = true; + + # Silent boot + silentBoot.enable = true; + + # Plymouth — custom kiki pixel theme + boot.plymouth = { + enable = true; + theme = "kiki-pixel"; + themePackages = [ + (pkgs.runCommand "plymouth-kiki-theme" { } '' + mkdir -p $out/share/plymouth/themes/kiki + cp -r ${./kiki-plymouth-theme/kiki}/* $out/share/plymouth/themes/kiki/ + substituteInPlace $out/share/plymouth/themes/kiki/kiki.plymouth \ + --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki" + '') + (pkgs.runCommand "plymouth-kiki-pixel-theme" { } '' + mkdir -p $out/share/plymouth/themes/kiki-pixel + cp -r ${./kiki-plymouth-theme/kiki-pixel}/* $out/share/plymouth/themes/kiki-pixel/ + substituteInPlace $out/share/plymouth/themes/kiki-pixel/kiki-pixel.plymouth \ + --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki-pixel" + '') + ]; + }; + + # Perform garbage collection weekly to maintain low disk usage + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 21d"; + }; + nix.settings.auto-optimise-store = true; + + # IWD wireless backend + networking.wireless.iwd.enable = true; + + # Extra groups for jaci user + main_user.extraGroups = [ "corectrl" ]; + + # Stylix overrides — light rose-pine-dawn theme with Reversal icons + stylix = { + base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml"; + polarity = "light"; + fonts.sizes = { + applications = 14; + desktop = 14; + popups = 14; + terminal = 14; + }; + iconTheme = { + package = pkgs.reversal-icon-theme; + light = "Reversal-dark"; + dark = "Reversal"; + }; + }; + + # Intel graphics acceleration (Framework 12) + hardware.graphics.enable = true; + hardware.enableRedistributableFirmware = true; + + # Intel iHD GPU + environment.sessionVariables.LIBVA_DRIVER_NAME = "iHD"; + + # Niri WM config + niriwm = { + enable = true; + useNonFree = true; + user = deskCfg.userName; + installGaming = deskCfg.installGaming; + systemPackages = with pkgs; [ + libreoffice + ]; + }; + + # Jaci-specific: gnome-software for Flatpak management + environment.systemPackages = with pkgs; [ + cryptsetup + gnome-software + ]; + + # Disable pcscd (not needed on jaci) + services.pcscd.enable = false; + + # Disable regreet — use direct niri-session via greetd + programs.regreet.enable = false; + services.greetd.settings.default_session = { + command = "${pkgs.niri}/bin/niri-session"; + user = deskCfg.userName; + }; + + # Bluetooth name + hardware.bluetooth.settings.General.Name = "Jaci-Frame"; + + system.stateVersion = "23.11"; +} diff --git a/jaci/dotfiles/labwc/autostart b/hosts/jaci/dotfiles/labwc/autostart similarity index 100% rename from jaci/dotfiles/labwc/autostart rename to hosts/jaci/dotfiles/labwc/autostart diff --git a/jaci/dotfiles/labwc/backgrounds/cat1.jpg b/hosts/jaci/dotfiles/labwc/backgrounds/cat1.jpg similarity index 100% rename from jaci/dotfiles/labwc/backgrounds/cat1.jpg rename to hosts/jaci/dotfiles/labwc/backgrounds/cat1.jpg diff --git a/jaci/dotfiles/labwc/environment b/hosts/jaci/dotfiles/labwc/environment similarity index 100% rename from jaci/dotfiles/labwc/environment rename to hosts/jaci/dotfiles/labwc/environment diff --git a/jaci/dotfiles/labwc/menu.xml b/hosts/jaci/dotfiles/labwc/menu.xml similarity index 100% rename from jaci/dotfiles/labwc/menu.xml rename to hosts/jaci/dotfiles/labwc/menu.xml diff --git a/jaci/dotfiles/labwc/rc.xml b/hosts/jaci/dotfiles/labwc/rc.xml similarity index 100% rename from jaci/dotfiles/labwc/rc.xml rename to hosts/jaci/dotfiles/labwc/rc.xml diff --git a/jaci/dotfiles/labwc/themerc-override b/hosts/jaci/dotfiles/labwc/themerc-override similarity index 100% rename from jaci/dotfiles/labwc/themerc-override rename to hosts/jaci/dotfiles/labwc/themerc-override diff --git a/jaci/kiki-plymouth-theme/kiki-loop.mp4 b/hosts/jaci/kiki-plymouth-theme/kiki-loop.mp4 similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-loop.mp4 rename to hosts/jaci/kiki-plymouth-theme/kiki-loop.mp4 diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/bullet.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/bullet.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/bullet.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/bullet.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/capslock.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/capslock.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/capslock.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/capslock.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/entry.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/entry.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/entry.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/entry.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/keyboard.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/keyboard.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/keyboard.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/keyboard.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/keymap-render.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/keymap-render.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/keymap-render.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/keymap-render.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.plymouth b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.plymouth similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.plymouth rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.plymouth diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.script b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.script similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.script rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/kiki-pixel.script diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/lock.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/lock.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/lock.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/lock.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-0.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-0.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-0.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-0.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-1.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-1.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-1.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-1.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-10.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-10.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-10.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-10.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-11.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-11.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-11.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-11.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-12.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-12.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-12.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-12.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-13.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-13.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-13.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-13.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-14.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-14.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-14.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-14.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-15.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-15.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-15.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-15.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-16.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-16.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-16.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-16.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-17.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-17.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-17.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-17.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-18.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-18.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-18.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-18.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-19.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-19.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-19.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-19.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-2.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-2.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-2.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-2.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-20.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-20.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-20.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-20.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-21.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-21.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-21.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-21.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-22.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-22.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-22.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-22.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-23.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-23.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-23.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-23.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-24.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-24.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-24.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-24.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-25.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-25.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-25.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-25.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-26.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-26.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-26.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-26.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-27.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-27.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-27.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-27.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-28.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-28.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-28.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-28.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-29.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-29.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-29.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-29.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-3.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-3.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-3.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-3.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-30.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-30.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-30.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-30.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-31.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-31.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-31.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-31.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-4.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-4.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-4.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-4.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-5.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-5.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-5.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-5.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-6.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-6.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-6.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-6.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-7.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-7.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-7.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-7.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-8.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-8.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-8.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-8.png diff --git a/jaci/kiki-plymouth-theme/kiki-pixel/progress-9.png b/hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-9.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki-pixel/progress-9.png rename to hosts/jaci/kiki-plymouth-theme/kiki-pixel/progress-9.png diff --git a/jaci/kiki-plymouth-theme/kiki.gif b/hosts/jaci/kiki-plymouth-theme/kiki.gif similarity index 100% rename from jaci/kiki-plymouth-theme/kiki.gif rename to hosts/jaci/kiki-plymouth-theme/kiki.gif diff --git a/jaci/kiki-plymouth-theme/kiki/bullet.png b/hosts/jaci/kiki-plymouth-theme/kiki/bullet.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/bullet.png rename to hosts/jaci/kiki-plymouth-theme/kiki/bullet.png diff --git a/jaci/kiki-plymouth-theme/kiki/capslock.png b/hosts/jaci/kiki-plymouth-theme/kiki/capslock.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/capslock.png rename to hosts/jaci/kiki-plymouth-theme/kiki/capslock.png diff --git a/jaci/kiki-plymouth-theme/kiki/entry.png b/hosts/jaci/kiki-plymouth-theme/kiki/entry.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/entry.png rename to hosts/jaci/kiki-plymouth-theme/kiki/entry.png diff --git a/jaci/kiki-plymouth-theme/kiki/keyboard.png b/hosts/jaci/kiki-plymouth-theme/kiki/keyboard.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/keyboard.png rename to hosts/jaci/kiki-plymouth-theme/kiki/keyboard.png diff --git a/jaci/kiki-plymouth-theme/kiki/keymap-render.png b/hosts/jaci/kiki-plymouth-theme/kiki/keymap-render.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/keymap-render.png rename to hosts/jaci/kiki-plymouth-theme/kiki/keymap-render.png diff --git a/jaci/kiki-plymouth-theme/kiki/kiki.plymouth b/hosts/jaci/kiki-plymouth-theme/kiki/kiki.plymouth similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/kiki.plymouth rename to hosts/jaci/kiki-plymouth-theme/kiki/kiki.plymouth diff --git a/jaci/kiki-plymouth-theme/kiki/kiki.script b/hosts/jaci/kiki-plymouth-theme/kiki/kiki.script similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/kiki.script rename to hosts/jaci/kiki-plymouth-theme/kiki/kiki.script diff --git a/jaci/kiki-plymouth-theme/kiki/lock.png b/hosts/jaci/kiki-plymouth-theme/kiki/lock.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/lock.png rename to hosts/jaci/kiki-plymouth-theme/kiki/lock.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-0.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-0.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-0.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-0.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-1.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-1.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-1.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-1.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-10.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-10.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-10.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-10.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-11.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-11.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-11.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-11.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-2.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-2.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-2.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-2.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-3.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-3.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-3.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-3.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-4.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-4.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-4.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-4.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-5.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-5.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-5.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-5.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-6.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-6.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-6.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-6.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-7.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-7.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-7.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-7.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-8.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-8.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-8.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-8.png diff --git a/jaci/kiki-plymouth-theme/kiki/progress-9.png b/hosts/jaci/kiki-plymouth-theme/kiki/progress-9.png similarity index 100% rename from jaci/kiki-plymouth-theme/kiki/progress-9.png rename to hosts/jaci/kiki-plymouth-theme/kiki/progress-9.png diff --git a/jaci/linked-dotfiles/niri/config.kdl b/hosts/jaci/linked-dotfiles/niri/config.kdl similarity index 100% rename from jaci/linked-dotfiles/niri/config.kdl rename to hosts/jaci/linked-dotfiles/niri/config.kdl diff --git a/jaci/modules/home-manager/face.png b/hosts/jaci/modules/home-manager/face.png similarity index 100% rename from jaci/modules/home-manager/face.png rename to hosts/jaci/modules/home-manager/face.png diff --git a/jaci/modules/home-manager/home.nix b/hosts/jaci/modules/home-manager/home.nix similarity index 71% rename from jaci/modules/home-manager/home.nix rename to hosts/jaci/modules/home-manager/home.nix index 79f5d42..c674552 100644 --- a/jaci/modules/home-manager/home.nix +++ b/hosts/jaci/modules/home-manager/home.nix @@ -7,96 +7,40 @@ osConfig, ... }: -let - userName = "jaci"; - fullName = "Jaci Anderson"; - email = "jaci.s.anderson@gmail.com"; -in { imports = [ - ../../../shared/modules/home-manager/programs.nix - ../../../shared/modules/home-manager/git-autosync.nix - ../../../shared/modules/home-manager/noctalia.nix - ../niri/niri_home.nix + ../../../../shared/modules/home-manager/base-home.nix ]; - home.username = userName; - home.homeDirectory = "/home/${userName}"; - programs.home-manager.enable = true; - home.stateVersion = "23.11"; # Please read the comment before changing. - - sharedPrograms.enable = true; - fonts.fontconfig.enable = true; - - # Stylix auto-theming - applies to all programs..enable apps - stylix = { - autoEnable = true; - targets.firefox = { - profileNames = [ - "default" - ]; - colorTheme.enable = true; # use firefox color - firefoxGnomeTheme.enable = true; - }; - }; - - # Enable niri home configuration - nirihome = { + baseHome = { enable = true; - homePackages = [ ]; + userName = "jaci"; + fullName = "Jaci Anderson"; + email = "jaci.s.anderson@gmail.com"; + stateVersion = "23.11"; + hostDir = "jaci"; }; - # Additional user packages - # Note: Programs with Stylix theming are in programs.nix + # Override zsh theme (base uses "half-life") + programs.zsh.oh-my-zsh.theme = "fox"; + + # Flatpak XDG_DATA_DIRS + programs.zsh.profileExtra = '' + export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share + ''; + + # Gaming packages home.packages = with pkgs; [ - # - # Gaming - # mangohud wine-wayland - - # - # Unix tools - # - lsd - htop - unzip - - # - # Style - # - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - # Additional fonts (main fonts managed by Stylix) + # Additional fonts unstablePkgs.nerd-fonts.hurmit unstablePkgs.nerd-fonts.overpass recursive ]; - # - # Dotfiles - # - - # Static symlinks + # Local dotfiles (host-specific, override shared) home.file = lib.mkMerge [ - # Shared dotfiles - ( - let - sharedDotfilesPath = ../../../shared/dotfiles; - in - if builtins.pathExists sharedDotfilesPath then - builtins.listToAttrs ( - map (name: { - name = "${config.xdg.configHome}/${name}"; - value = { - source = lib.mkDefault (sharedDotfilesPath + "/${name}"); - }; - }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)) - ) - else - { } - ) - # Add local dotfiles, overriding from local over shared ( let localDotfilesPath = ../../dotfiles; @@ -135,12 +79,6 @@ in } ]; - # Active symlinks for live-edited config - xdg.configFile = { - "niri".source = - config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/jaci/linked-dotfiles/niri"; - }; - # Override Flatpak Steam to disable GPU acceleration (fixes black window on Niri) xdg.desktopEntries."com.valvesoftware.Steam" = { name = "Steam"; @@ -154,91 +92,13 @@ in ]; }; - home.sessionVariables = { - EDITOR = "hx"; - # For electron apps - NIXOS_OZONE_WL = "1"; - }; - - # Git setup - programs.git = { - enable = true; - settings = { - user.name = fullName; - user.email = email; - init = { - defaultBranch = "main"; - }; - pull = { - ff = "only"; - }; - merge = { - conflictStyle = "zdiff3"; - }; - push = { - autoSetupRemote = "true"; - }; - }; - }; - - programs = { - bash.enable = true; - }; - - # enable saving ssh secrets (needed for private repos) - services.gnome-keyring.enable = true; - services.gnome-keyring.components = [ - "ssh" - "secrets" - ]; - - # Zsh setup - programs.zsh = { - enable = true; - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - theme = "fox"; - }; - initContent = '' - # History - HISTSIZE=10000 - SAVEHIST=10000 - setopt SHARE_HISTORY - setopt APPEND_HISTORY - - # integrate ssh-agent from gnome keyring - export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh - - # Better Unix Aliases - alias ls="lsd" - alias l="lsd --almost-all --long" - alias llm="lsd --timesort --long" - alias lS="lsd --oneline --classic" - alias lt="lsd --tree --depth=2" - alias cat="bat --paging=never" - alias rm="rm -i" - ''; - profileExtra = '' - export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share - ''; - syntaxHighlighting = { - enable = true; - }; - }; - - # Stylix handles Qt and GTK theming - - # Enable bluetooth headphone controls - services.mpris-proxy.enable = true; - # Git autosync for Documents services.git-autosync = { enable = false; repos.documents = { - path = "/home/${userName}/Documents"; - gitName = fullName; - gitEmail = email; + path = "/home/jaci/Documents"; + gitName = "Jaci Anderson"; + gitEmail = "jaci.s.anderson@gmail.com"; }; }; @@ -444,24 +304,12 @@ in lockScreenBlur = 0; lockScreenTint = 0; keybinds = { - keyUp = [ - "Up" - ]; - keyDown = [ - "Down" - ]; - keyLeft = [ - "Left" - ]; - keyRight = [ - "Right" - ]; - keyEnter = [ - "Return" - ]; - keyEscape = [ - "Esc" - ]; + keyUp = [ "Up" ]; + keyDown = [ "Down" ]; + keyLeft = [ "Left" ]; + keyRight = [ "Right" ]; + keyEnter = [ "Return" ]; + keyEscape = [ "Esc" ]; }; }; ui = { @@ -495,18 +343,9 @@ in }; calendar = { cards = [ - { - enabled = true; - id = "calendar-header-card"; - } - { - enabled = true; - id = "calendar-month-card"; - } - { - enabled = true; - id = "weather-card"; - } + { enabled = true; id = "calendar-header-card"; } + { enabled = true; id = "calendar-month-card"; } + { enabled = true; id = "weather-card"; } ]; }; wallpaper = { @@ -575,59 +414,25 @@ in diskPath = "/"; shortcuts = { left = [ - { - id = "Network"; - } - { - id = "Bluetooth"; - } - { - id = "WallpaperSelector"; - } - { - id = "NoctaliaPerformance"; - } + { id = "Network"; } + { id = "Bluetooth"; } + { id = "WallpaperSelector"; } + { id = "NoctaliaPerformance"; } ]; right = [ - { - id = "Notifications"; - } - { - id = "PowerProfile"; - } - { - id = "KeepAwake"; - } - { - id = "NightLight"; - } + { id = "Notifications"; } + { id = "PowerProfile"; } + { id = "KeepAwake"; } + { id = "NightLight"; } ]; }; cards = [ - { - enabled = true; - id = "profile-card"; - } - { - enabled = true; - id = "shortcuts-card"; - } - { - enabled = true; - id = "audio-card"; - } - { - enabled = false; - id = "brightness-card"; - } - { - enabled = true; - id = "weather-card"; - } - { - enabled = true; - id = "media-sysmon-card"; - } + { enabled = true; id = "profile-card"; } + { enabled = true; id = "shortcuts-card"; } + { enabled = true; id = "audio-card"; } + { enabled = false; id = "brightness-card"; } + { enabled = true; id = "weather-card"; } + { enabled = true; id = "media-sysmon-card"; } ]; }; systemMonitor = { @@ -692,48 +497,12 @@ in largeButtonsLayout = "single-row"; showNumberLabels = true; powerOptions = [ - { - action = "lock"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "suspend"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "hibernate"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "reboot"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "logout"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "shutdown"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } + { action = "lock"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "suspend"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "hibernate"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "reboot"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "logout"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "shutdown"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } ]; }; notifications = { @@ -770,12 +539,7 @@ in autoHideMs = 2000; overlayLayer = true; backgroundOpacity = 1.0; - enabledTypes = [ - 0 - 1 - 2 - 3 - ]; + enabledTypes = [ 0 1 2 3 ]; monitors = [ ]; }; audio = { diff --git a/jaci/modules/home-manager/wallpapers/kiki-and-boy.png b/hosts/jaci/modules/home-manager/wallpapers/kiki-and-boy.png similarity index 100% rename from jaci/modules/home-manager/wallpapers/kiki-and-boy.png rename to hosts/jaci/modules/home-manager/wallpapers/kiki-and-boy.png diff --git a/jaci/modules/home-manager/wallpapers/kiki-jiji.png b/hosts/jaci/modules/home-manager/wallpapers/kiki-jiji.png similarity index 100% rename from jaci/modules/home-manager/wallpapers/kiki-jiji.png rename to hosts/jaci/modules/home-manager/wallpapers/kiki-jiji.png diff --git a/jaci/modules/home-manager/wallpapers/kiki-sky.jpg b/hosts/jaci/modules/home-manager/wallpapers/kiki-sky.jpg similarity index 100% rename from jaci/modules/home-manager/wallpapers/kiki-sky.jpg rename to hosts/jaci/modules/home-manager/wallpapers/kiki-sky.jpg diff --git a/jaci/modules/home-manager/wallpapers/kiki_background.jpg b/hosts/jaci/modules/home-manager/wallpapers/kiki_background.jpg similarity index 100% rename from jaci/modules/home-manager/wallpapers/kiki_background.jpg rename to hosts/jaci/modules/home-manager/wallpapers/kiki_background.jpg diff --git a/jaci/nixos/hardware-configuration.nix b/hosts/jaci/nixos/hardware-configuration.nix similarity index 100% rename from jaci/nixos/hardware-configuration.nix rename to hosts/jaci/nixos/hardware-configuration.nix diff --git a/jaci/notes.md b/hosts/jaci/notes.md similarity index 100% rename from jaci/notes.md rename to hosts/jaci/notes.md diff --git a/luci/configuration.nix b/hosts/luci/configuration.nix similarity index 100% rename from luci/configuration.nix rename to hosts/luci/configuration.nix diff --git a/luci/default.nix b/hosts/luci/default.nix similarity index 90% rename from luci/default.nix rename to hosts/luci/default.nix index bde970a..1a2dddd 100644 --- a/luci/default.nix +++ b/hosts/luci/default.nix @@ -7,8 +7,8 @@ { imports = [ ./nixos/hardware-configuration.nix - ../shared/nix-gc.nix - ../shared/server-configuration.nix + ../../shared/nix-gc.nix + ../../shared/server-configuration.nix ]; serverConfig = { diff --git a/luci/dotfiles/helix/config.toml b/hosts/luci/dotfiles/helix/config.toml similarity index 100% rename from luci/dotfiles/helix/config.toml rename to hosts/luci/dotfiles/helix/config.toml diff --git a/luci/dotfiles/helix/languages.toml b/hosts/luci/dotfiles/helix/languages.toml similarity index 100% rename from luci/dotfiles/helix/languages.toml rename to hosts/luci/dotfiles/helix/languages.toml diff --git a/luci/modules/home-manager/home.nix b/hosts/luci/modules/home-manager/home.nix similarity index 100% rename from luci/modules/home-manager/home.nix rename to hosts/luci/modules/home-manager/home.nix diff --git a/luci/modules/radicale/rad_pass b/hosts/luci/modules/radicale/rad_pass similarity index 100% rename from luci/modules/radicale/rad_pass rename to hosts/luci/modules/radicale/rad_pass diff --git a/luci/nixos/hardware-configuration.nix b/hosts/luci/nixos/hardware-configuration.nix similarity index 100% rename from luci/nixos/hardware-configuration.nix rename to hosts/luci/nixos/hardware-configuration.nix diff --git a/nate-work/bot-wallpaper.jpg b/hosts/nate-work/bot-wallpaper.jpg similarity index 100% rename from nate-work/bot-wallpaper.jpg rename to hosts/nate-work/bot-wallpaper.jpg diff --git a/hosts/nate-work/default.nix b/hosts/nate-work/default.nix new file mode 100644 index 0000000..4e5f455 --- /dev/null +++ b/hosts/nate-work/default.nix @@ -0,0 +1,287 @@ +{ config, lib, inputs, pkgs, timeZone, ... }: +let + deskCfg = config.deskCfg; + unstable = import inputs.nixpkgs-unstable { + system = "x86_64-linux"; + config.allowUnfree = true; + }; + isOnTheGo = builtins.elem "on-the-go" config.system.nixos.tags; +in +{ + imports = [ + ./nixos/hardware-configuration.nix + ./nixos/auto-update.nix + ./modules/sway/sway_conf.nix + ./modules/hypr/hyprland.nix + ../../shared/modules/desktop/base.nix + ../../shared/modules/desktop/stylix.nix + ../../shared/modules/desktop/silent-boot.nix + ../../shared/modules/desktop/greetd.nix + ../../shared/modules/wm/niri.nix + ../../shared/modules/services/syncthing.nix + ../../shared/modules/services/kdeconnect.nix + ../../shared/modules/services/docker.nix + ../../shared/modules/services/avahi.nix + ../../shared/modules/services/hyprvoice.nix + ../../shared/modules/services/motu-m4-combined.nix + ]; + + deskCfg = { + userName = "nate"; + hostName = "nate-vasion"; + fullName = "Nate Anderson"; + de = "niri"; + installGaming = true; + }; + + # Limit the number of generations to keep + boot.loader.systemd-boot.configurationLimit = 5; + + # Systemd initrd for faster boot + boot.initrd.systemd.enable = true; + + # Silent boot + silentBoot.enable = true; + + # Plymouth boot animation + boot.plymouth = { + enable = true; + theme = "rings"; + themePackages = with pkgs; [ + (adi1090x-plymouth-themes.override { + selected_themes = [ "rings" ]; + }) + ]; + }; + + # Perform garbage collection weekly to maintain low disk usage + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + nix.settings.auto-optimise-store = true; + + # Auto-update config + autoCfg = { + userName = "nate"; + flakePath = "/home/nate/nixos"; + hostName = "nate-vasion"; + }; + + # ClamAV antivirus + services.clamav.daemon.enable = true; + services.clamav.scanner.enable = true; + + # Extra groups + main_user.extraGroups = [ "dialout" "docker" "i2c" "lp" "scanner" "syncthing" ]; + + # Sway WM (legacy, disabled) + swaywm = { + enable = false; + useNonFree = true; + installGaming = deskCfg.installGaming; + systemPackages = with pkgs; [ libreoffice ]; + }; + + # Hyprland (legacy, disabled) + hypr = { + enable = false; + user = deskCfg.userName; + systemPackages = with pkgs; [ libreoffice ]; + }; + + # Niri WM config + niriwm = { + enable = true; + useNonFree = true; + user = deskCfg.userName; + systemPackages = with pkgs; [ libreoffice ]; + }; + + # Steam with gamescope + programs.steam = { + enable = true; + gamescopeSession.enable = true; + }; + + # Virt-manager for VMs + programs.virt-manager.enable = true; + + # MOTU M4 audio interface + services.motu-m4-combined = { + enable = true; + user = deskCfg.userName; + }; + + # Hyprvoice dictation + services.hyprvoice = { + enable = true; + user = deskCfg.userName; + }; + + # Docker — unstable package, start on boot + dockerConfig = { + enableOnBoot = true; + useUnstable = true; + }; + + # usbmuxd for iOS + services.usbmuxd.enable = true; + + # Fingerprint reader + services.fprintd.enable = true; + + # Disable lid switch sleep when plugged into power (laptop docked) + services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; + + # Nate-work session variables + environment.sessionVariables = { + FIREFOX_USE_SYSTEM_THEME = "true"; + # For NVIDIA — only enable if not using on-the-go + GBM_BACKEND = if isOnTheGo then "" else "nvidia-drm"; + __GLX_VENDOR_LIBRARY_NAME = if isOnTheGo then "" else "nvidia"; + }; + + # Nate-work extra packages + environment.systemPackages = with pkgs; [ + foot + nbfc-linux + kanshi + man-pages + man-pages-posix + pavucontrol + waybar + wdisplays + wofi + ]; + + # NFS support in initrd + boot.initrd.supportedFilesystems = { nfs = true; }; + + # Libvirtd / QEMU + virtualisation = { + libvirtd = { + enable = true; + qemu.swtpm.enable = true; + }; + spiceUSBRedirection.enable = true; + }; + users.groups.libvirtd.members = [ "nate" ]; + + # Stylix overrides — kimber theme, different wallpaper, larger font sizes + stylix = { + image = ./bot-wallpaper.jpg; + base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml"; + fonts.sizes = { + applications = 14; + desktop = 16; + popups = 14; + terminal = 14; + }; + }; + + # Bluetooth + hardware.bluetooth.settings.General.Name = "Nate-Vasion"; + + # udev rules — betaflight configurator + i2c for ddcutil + services.udev.extraRules = '' + # For betaflight configurator + # DFU (Internal bootloader for STM32 and AT32 MCUs) + SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + # For ddcutil monitor controls + KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" + ''; + + # NVIDIA GPU setup + services.xserver.videoDrivers = [ "nvidia" ]; + hardware = { + graphics = { + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ + intel-vaapi-driver + intel-media-driver + vpl-gpu-rt + ]; + }; + nvidia = { + modesetting.enable = true; + powerManagement.enable = false; + powerManagement.finegrained = true; + open = true; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + prime = { + offload.enable = true; + offload.enableOffloadCmd = true; + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; + }; + + # On-the-go specialisation — disables NVIDIA GPU, uses Intel only + specialisation = { + on-the-go.configuration = { + system.nixos.tags = [ "on-the-go" ]; + + # Blacklist all NVIDIA kernel modules + boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" "nvidia_uvm" ]; + + # Force Intel i915 driver for 13th gen (Raptor Lake) integrated graphics + boot.kernelParams = [ + "i915.force_probe=a7a0" + "module_blacklist=nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm" + ]; + + boot.extraModprobeConfig = '' + blacklist nouveau + blacklist nvidia + blacklist nvidia_drm + blacklist nvidia_modeset + blacklist nvidia_uvm + options nouveau modeset=0 + ''; + + # Remove NVIDIA devices from PCI bus to save power + services.udev.extraRules = '' + # Remove NVIDIA USB xHCI Host Controller devices, if present + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" + # Remove NVIDIA USB Type-C UCSI devices, if present + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1" + # Remove NVIDIA Audio devices, if present + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1" + # Remove NVIDIA VGA/3D controller devices + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1" + ''; + + # Use Intel modesetting driver only + services.xserver.videoDrivers = lib.mkForce [ "modesetting" ]; + + # Disable all NVIDIA hardware configurations + hardware.nvidia = { + prime.offload.enable = lib.mkForce false; + prime.offload.enableOffloadCmd = lib.mkForce false; + powerManagement.finegrained = lib.mkForce false; + prime.sync.enable = lib.mkForce false; + }; + + # Ensure Intel graphics packages are available + hardware.graphics.extraPackages = lib.mkForce (with pkgs; [ + intel-vaapi-driver + intel-media-driver + vpl-gpu-rt + ]); + + # Clear NVIDIA-specific environment variables + environment.sessionVariables = { + GBM_BACKEND = lib.mkForce ""; + __GLX_VENDOR_LIBRARY_NAME = lib.mkForce ""; + }; + }; + }; + + system.stateVersion = "23.11"; +} diff --git a/nate-work/dotfiles/zsh_functions.zsh b/hosts/nate-work/dotfiles/zsh_functions.zsh similarity index 100% rename from nate-work/dotfiles/zsh_functions.zsh rename to hosts/nate-work/dotfiles/zsh_functions.zsh diff --git a/nate-work/linked-dotfiles/hypr/hypridle.conf b/hosts/nate-work/linked-dotfiles/hypr/hypridle.conf similarity index 100% rename from nate-work/linked-dotfiles/hypr/hypridle.conf rename to hosts/nate-work/linked-dotfiles/hypr/hypridle.conf diff --git a/nate-work/linked-dotfiles/hypr/hyprland.conf b/hosts/nate-work/linked-dotfiles/hypr/hyprland.conf similarity index 100% rename from nate-work/linked-dotfiles/hypr/hyprland.conf rename to hosts/nate-work/linked-dotfiles/hypr/hyprland.conf diff --git a/nate-work/linked-dotfiles/hypr/nix.png b/hosts/nate-work/linked-dotfiles/hypr/nix.png similarity index 100% rename from nate-work/linked-dotfiles/hypr/nix.png rename to hosts/nate-work/linked-dotfiles/hypr/nix.png diff --git a/nate-work/linked-dotfiles/hypr/scripts/music_links.txt b/hosts/nate-work/linked-dotfiles/hypr/scripts/music_links.txt similarity index 100% rename from nate-work/linked-dotfiles/hypr/scripts/music_links.txt rename to hosts/nate-work/linked-dotfiles/hypr/scripts/music_links.txt diff --git a/nate-work/linked-dotfiles/hypr/scripts/music_setup.sh b/hosts/nate-work/linked-dotfiles/hypr/scripts/music_setup.sh similarity index 100% rename from nate-work/linked-dotfiles/hypr/scripts/music_setup.sh rename to hosts/nate-work/linked-dotfiles/hypr/scripts/music_setup.sh diff --git a/nate-work/linked-dotfiles/hypr/scripts/music_setup_cmd.sh b/hosts/nate-work/linked-dotfiles/hypr/scripts/music_setup_cmd.sh similarity index 100% rename from nate-work/linked-dotfiles/hypr/scripts/music_setup_cmd.sh rename to hosts/nate-work/linked-dotfiles/hypr/scripts/music_setup_cmd.sh diff --git a/nate-work/linked-dotfiles/hypr/scripts/screenshot.sh b/hosts/nate-work/linked-dotfiles/hypr/scripts/screenshot.sh similarity index 100% rename from nate-work/linked-dotfiles/hypr/scripts/screenshot.sh rename to hosts/nate-work/linked-dotfiles/hypr/scripts/screenshot.sh diff --git a/nate-work/linked-dotfiles/hypr/va_background.png b/hosts/nate-work/linked-dotfiles/hypr/va_background.png similarity index 100% rename from nate-work/linked-dotfiles/hypr/va_background.png rename to hosts/nate-work/linked-dotfiles/hypr/va_background.png diff --git a/nate-work/linked-dotfiles/niri/config.kdl b/hosts/nate-work/linked-dotfiles/niri/config.kdl similarity index 95% rename from nate-work/linked-dotfiles/niri/config.kdl rename to hosts/nate-work/linked-dotfiles/niri/config.kdl index 0abfe39..8b168f3 100644 --- a/nate-work/linked-dotfiles/niri/config.kdl +++ b/hosts/nate-work/linked-dotfiles/niri/config.kdl @@ -11,7 +11,7 @@ spawn-at-startup "firefox" spawn-sh-at-startup "kanshi" spawn-sh-at-startup "sleep 5 && syncthingtray --wait" -screenshot-path null // save screenshots just to clipboard +// screenshot-path null // save screenshots just to clipboard prefer-no-csd // (Client Side Decorations) ask clients to not add their own decorations hotkey-overlay { @@ -26,6 +26,11 @@ debug { // // OUTPUTS // +output "eDP-1" { + mode "2560x1600@165.019" + scale 1.0 +} + output "HDMI-A-1" { scale 1.0 // variable-refresh-rate on-demand=true @@ -73,7 +78,7 @@ input { } warp-mouse-to-focus mode="center-xy" - focus-follows-mouse + // focus-follows-mouse } // @@ -194,9 +199,8 @@ window-rule { // Chat windows window-rule { match app-id=r#"^com.slack.Slack$"# title="Huddle" - match app-id=r#"^zoom$"# - exclude app-id=r#"^zoom$"# title=r#"^Meeting$"# - + match app-id=r#"^Zoom Workplace$"# + exclude app-id=r#"^Zoom Workplace$"# title=r#"^Meeting$"# open-floating true open-on-workspace "chat" @@ -204,12 +208,20 @@ window-rule { window-rule { match app-id=r#"^com.slack.Slack$"# - match app-id=r#"^zoom$"# + match app-id=r#"^Zoom Workplace$"# open-focused true open-on-workspace "chat" } +// Zoom menu popups (dropdowns, context menus) +window-rule { + match app-id=r#"^Zoom Workplace$"# title=r#".*menu.*"# + open-floating true + min-width 250 + open-focused true +} + // Scratch windows window-rule { match app-id=r#"^org\.keepassxc\.KeePassXC$"# @@ -431,6 +443,9 @@ binds { // Utilities // + // Dictation + Mod+semicolon { spawn "hyprvoice" "toggle"; } + // Notifications - Noctalia notification panel Mod+Shift+C { spawn "noctalia-shell" "ipc" "call" "notificationHistory" "toggle"; } diff --git a/nate-work/modules/home-manager/home.nix b/hosts/nate-work/modules/home-manager/home.nix similarity index 72% rename from nate-work/modules/home-manager/home.nix rename to hosts/nate-work/modules/home-manager/home.nix index b314481..5a0b985 100644 --- a/nate-work/modules/home-manager/home.nix +++ b/hosts/nate-work/modules/home-manager/home.nix @@ -8,8 +8,6 @@ }: let userName = "nate"; - fullName = "Nate Anderson"; - email = "nate.anderson@vasion.com"; unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; @@ -17,198 +15,64 @@ let in { imports = [ - ../../../shared/modules/home-manager/programs.nix - ../../../shared/modules/home-manager/git-autosync.nix - ../../../shared/modules/home-manager/noctalia.nix - ../niri/niri_home.nix - ../vpn-proxy/vpn-proxy.nix + ../../../../shared/modules/home-manager/base-home.nix + ../../../../shared/modules/services/vpn-proxy/vpn-proxy.nix ]; - home.username = userName; - home.homeDirectory = "/home/${userName}"; - - programs.home-manager.enable = true; - home.stateVersion = "23.11"; # Please read the comment before changing. - - # Stylix auto-theming - applies to all programs..enable apps - stylix = { - autoEnable = true; - # Must tell which profile - targets.firefox = { - profileNames = [ "default" ]; - colorTheme.enable = true; # use firefox color - firefoxGnomeTheme.enable = true; - }; + baseHome = { + enable = true; + userName = "nate"; + fullName = "Nate Anderson"; + email = "nate.anderson@vasion.com"; + stateVersion = "23.11"; + hostDir = "nate-work"; }; - # Enable shared modules - sharedPrograms.enable = true; - fonts.fontconfig.enable = true; - # Enable VPN proxy script vpnProxy.enable = true; - # Git autosync for star-command - services.git-autosync = { + # Zsh — work-specific config with direnv, Go, work envs + programs.zsh.initContent = '' + # direnv setup + eval "$(direnv hook zsh)" + + # Work envs + source ~/.vasion_env + # bonus functions + source ~/.config/zsh_functions.zsh + + export GOBIN=~/go/bin + export PATH=$PATH:$GOBIN + export NIX_SHELL=/usr/bin/env zsh + + + claudew() { + export ANTHROPIC_MODEL=us.anthropic.claude-sonnet-4-20250514-v1:0 + export CLAUDE_CODE_USE_BEDROCK=1 + export AWS_REGION=us-west-2 + export CLAUDE_CONFIG_DIR=/home/nate/.claude-work + claude + } + claudep() { + unset ANTHROPIC_MODEL + unset CLAUDE_CODE_USE_BEDROCK + unset AWS_REGION + export CLAUDE_CONFIG_DIR=/home/nate/.claude-personal + claude + } + ''; + # Additional shell aliases beyond base + programs.zsh.shellAliases = { + ccat = "cat"; + catp = "bat --paging=never -p"; + }; + + # Additional programs + programs.direnv = { enable = true; - repos.star-command = { - path = "/home/${userName}/source/star-command"; - gitName = fullName; - gitEmail = email; - }; + enableZshIntegration = true; + nix-direnv.enable = true; }; - - nirihome = { - enable = true; - homePackages = [ ]; - }; - - # Additional user packages - # Note: Programs with Stylix theming are in shared modules - home.packages = with pkgs; [ - # - # Dev Tools - # - vscode-fhs - unstable.docker_25 - docker-compose - jq - gnumake - mariadb - cmake - gcc - oxker # docker desktop tui <3 - python3 - ## nodejs frontend - nodejs_24 - husky - pnpm - yarn - ## dev services cli - gh - awscli2 - ## AI - unstable.claude-code - ## Go stuff - go - unstable.delve - gotools - go-tools - govulncheck - unstable.golangci-lint - go-swag - trivy - - ### LSP's - gopls - nil - typescript-language-server - nodePackages_latest.bash-language-server - openscad-lsp - vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp - yaml-language-server - ltex-ls - - ### Misc - usbutils - nfs-utils - - # - # Unix tools - # - duf - dust - fd - lsd - lsof - ripgrep - tre-command - gtop - htop - neofetch - unzip - nmap - file - - # - # Photo / Video - # - imv - ffmpeg - audacity - yt-dlp - simple-scan - # iphone connections - libimobiledevice - ifuse - - # - # Communication - # - mumble - - # - # Other - # - chromium - obs-studio - gnome-disk-utility - hugo - - # - # Style (Qt plugin for Stylix) - # - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - # Additional fonts (main fonts managed by Stylix) - unstable.nerd-fonts.hurmit - unstable.nerd-fonts.overpass - unstable.nerd-fonts.monaspace - monaspace - ]; - - # enable saving ssh secrets (needed for go mod installing private packages) - services.gnome-keyring.enable = true; - services.gnome-keyring.components = [ - "ssh" - "secrets" - ]; - # Enable bluetooth headphone controls - services.mpris-proxy.enable = true; - - home.sessionVariables = { - EDITOR = "hx"; - # For electron apps - NIXOS_OZONE_WL = "1"; - }; - - # Git setup - programs.git = { - enable = true; - settings = { - user.name = fullName; - user.email = email; - init = { - defaultBranch = "main"; - }; - merge = { - conflictStyle = "zdiff3"; - }; - pull = { - ff = "only"; - }; - push = { - autoSetupRemote = "true"; - }; - # Vasion rewrite rule - url = { - "git@github.com:" = { - insteadOf = "https://github.com/"; - }; - }; - }; - }; - # Better git diffs with delta programs.delta = { enable = true; enableGitIntegration = true; @@ -217,125 +81,35 @@ in hyperlinks = true; }; }; - # direnv for auto nix flake shells - programs = { - direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; - bash.enable = true; + # Git — Vasion SSH rewrite + programs.git.settings.url = { + "git@github.com:" = { + insteadOf = "https://github.com/"; + }; }; - # Zsh setup - programs.zsh = { + # Stylix Firefox theming overrides + stylix.targets.firefox = { + profileNames = [ "default" ]; + colorTheme.enable = true; + firefoxGnomeTheme.enable = true; + }; + + # KDEConnect (HM-level indicator) + services.kdeconnect = { enable = true; - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - theme = "half-life"; - }; - initContent = '' - # integrate ssh-agent from gnome keyring - export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh - - # direnv setup - eval "$(direnv hook zsh)" - - # History - HISTSIZE=10000 - SAVEHIST=10000 - setopt SHARE_HISTORY - setopt APPEND_HISTORY - - # Work envs - source ~/.vasion_env - # bonus functions - source ~/.config/zsh_functions.zsh - - export GOBIN=~/go/bin - export PATH=$PATH:$GOBIN - export NIX_SHELL=/usr/bin/env zsh - - - claudew() { - export ANTHROPIC_MODEL=us.anthropic.claude-sonnet-4-20250514-v1:0 - export CLAUDE_CODE_USE_BEDROCK=1 - export AWS_REGION=us-west-2 - export CLAUDE_CONFIG_DIR=/home/nate/.claude-work - claude - } - claudep() { - unset ANTHROPIC_MODEL - unset CLAUDE_CODE_USE_BEDROCK - unset AWS_REGION - export CLAUDE_CONFIG_DIR=/home/nate/.claude-personal - claude - } - ''; - shellAliases = { - ls = "lsd"; - l = "lsd --almost-all --long"; - llm = "lsd --timesort --long"; - lS = "lsd --oneline --classic"; - lt = "lsd --tree --depth=2"; - cat = "bat --paging=never"; - ccat = "cat"; - catp = "bat --paging=never -p"; - rm = "rm -i"; - }; - syntaxHighlighting = { - enable = true; - }; + indicator = true; }; - # Stylix handles Qt and GTK theming - - home.file = lib.mkMerge [ - # Shared dotfiles - ( - let - sharedDotfilesPath = ../../../shared/dotfiles; - in - if builtins.pathExists sharedDotfilesPath then - builtins.listToAttrs ( - map (name: { - name = ".config/${name}"; - value = { - source = lib.mkDefault (sharedDotfilesPath + "/${name}"); - }; - }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)) - ) - else - { } - ) - # Add local dotfiles, overriding from local over shared - ( - let - localDotfilesPath = ../../dotfiles; - in - if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != { } then - builtins.listToAttrs ( - map (name: { - name = ".config/${name}"; - value = { - source = localDotfilesPath + "/${name}"; - }; - }) (builtins.attrNames (builtins.readDir localDotfilesPath)) - ) - else - { } - ) - ]; - - xdg.configFile = { - # Active linked dotfiles - "hypr".source = - config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/nate-work/linked-dotfiles/hypr"; - "niri".source = - config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/nate-work/linked-dotfiles/niri"; - # waybar is now managed by shared/modules/home-manager/waybar.nix via waybarConfig.enable + # Git autosync for star-command + services.git-autosync = { + enable = true; + repos.star-command = { + path = "/home/${userName}/source/star-command"; + gitName = "Nate Anderson"; + gitEmail = "nate.anderson@vasion.com"; + }; }; # Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset) @@ -586,18 +360,9 @@ in }; calendar = { cards = [ - { - enabled = true; - id = "calendar-header-card"; - } - { - enabled = true; - id = "calendar-month-card"; - } - { - enabled = true; - id = "weather-card"; - } + { enabled = true; id = "calendar-header-card"; } + { enabled = true; id = "calendar-month-card"; } + { enabled = true; id = "weather-card"; } ]; }; wallpaper = { @@ -679,30 +444,12 @@ in ]; }; cards = [ - { - enabled = true; - id = "profile-card"; - } - { - enabled = true; - id = "shortcuts-card"; - } - { - enabled = true; - id = "audio-card"; - } - { - enabled = false; - id = "brightness-card"; - } - { - enabled = true; - id = "weather-card"; - } - { - enabled = true; - id = "media-sysmon-card"; - } + { enabled = true; id = "profile-card"; } + { enabled = true; id = "shortcuts-card"; } + { enabled = true; id = "audio-card"; } + { enabled = false; id = "brightness-card"; } + { enabled = true; id = "weather-card"; } + { enabled = true; id = "media-sysmon-card"; } ]; }; systemMonitor = { @@ -767,48 +514,12 @@ in largeButtonsLayout = "single-row"; showNumberLabels = true; powerOptions = [ - { - action = "lock"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "suspend"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "hibernate"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "reboot"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "logout"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } - { - action = "shutdown"; - command = ""; - countdownEnabled = true; - enabled = true; - keybind = ""; - } + { action = "lock"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "suspend"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "hibernate"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "reboot"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "logout"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } + { action = "shutdown"; command = ""; countdownEnabled = true; enabled = true; keybind = ""; } ]; }; notifications = { @@ -821,11 +532,7 @@ in lowUrgencyDuration = 3; normalUrgencyDuration = 8; criticalUrgencyDuration = 15; - saveToHistory = { - low = true; - normal = true; - critical = true; - }; + saveToHistory = { low = true; normal = true; critical = true; }; sounds = { enabled = false; volume = 0.5; @@ -845,12 +552,7 @@ in autoHideMs = 2000; overlayLayer = true; backgroundOpacity = 1.0; - enabledTypes = [ - 0 - 1 - 2 - 3 - ]; + enabledTypes = [ 0 1 2 3 ]; monitors = [ ]; }; audio = { @@ -911,4 +613,139 @@ in }; }; }; + + # Additional user packages + home.packages = with pkgs; [ + # + # Dev Tools + # + vscode-fhs + unstable.docker_25 + docker-compose + jq + gnumake + mariadb + cmake + gcc + oxker + python3 + ## nodejs frontend + nodejs_24 + husky + pnpm + yarn + ## dev services cli + gh + awscli2 + ## AI + unstable.claude-code + ## Go stuff + go + unstable.delve + gotools + go-tools + govulncheck + unstable.golangci-lint + go-swag + trivy + + ### LSP's + gopls + nil + typescript-language-server + nodePackages_latest.bash-language-server + openscad-lsp + vscode-langservers-extracted + yaml-language-server + ltex-ls + + ### Misc + usbutils + nfs-utils + + # + # Unix tools + # + duf + dust + fd + lsof + ripgrep + tre-command + gtop + neofetch + nmap + file + + # + # Photo / Video + # + imv + ffmpeg + audacity + yt-dlp + simple-scan + # iphone connections + libimobiledevice + ifuse + + # + # Communication + # + mumble + (zoom-us.override { gnomeXdgDesktopPortalSupport = true; }) + + # + # Other + # + chromium + obs-studio + gnome-disk-utility + hugo + tailscale-systray + + # + # Additional fonts + # + unstable.nerd-fonts.hurmit + unstable.nerd-fonts.overpass + unstable.nerd-fonts.monaspace + monaspace + ]; + + # Local dotfiles (host-specific, override shared) + home.file = lib.mkMerge [ + ( + let + localDotfilesPath = ../../dotfiles; + in + if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != { } then + builtins.listToAttrs ( + map (name: { + name = "${config.xdg.configHome}/${name}"; + value = { + source = localDotfilesPath + "/${name}"; + }; + }) (builtins.attrNames (builtins.readDir localDotfilesPath)) + ) + else + { } + ) + ]; + + # Hypr and niri symlinks + xdg.configFile = { + "hypr".source = + config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/hosts/nate-work/linked-dotfiles/hypr"; + }; + # Override niri symlink path (base-home sets this with mkDefault) + # No override needed — base-home already uses hosts/${hostDir}/linked-dotfiles/niri + + # Cava audio visualizer + programs.cava = { + enable = true; + settings = { + smoothing.noise_reduction = 55; + }; + }; } diff --git a/nate-work/modules/hypr/hypr_home.nix b/hosts/nate-work/modules/hypr/hypr_home.nix similarity index 100% rename from nate-work/modules/hypr/hypr_home.nix rename to hosts/nate-work/modules/hypr/hypr_home.nix diff --git a/nate-work/modules/hypr/hyprland.nix b/hosts/nate-work/modules/hypr/hyprland.nix similarity index 100% rename from nate-work/modules/hypr/hyprland.nix rename to hosts/nate-work/modules/hypr/hyprland.nix diff --git a/nate-work/modules/sway/sway_conf.nix b/hosts/nate-work/modules/sway/sway_conf.nix similarity index 100% rename from nate-work/modules/sway/sway_conf.nix rename to hosts/nate-work/modules/sway/sway_conf.nix diff --git a/nate-work/nixos/auto-update.nix b/hosts/nate-work/nixos/auto-update.nix similarity index 100% rename from nate-work/nixos/auto-update.nix rename to hosts/nate-work/nixos/auto-update.nix diff --git a/nate-work/nixos/hardware-configuration.nix b/hosts/nate-work/nixos/hardware-configuration.nix similarity index 100% rename from nate-work/nixos/hardware-configuration.nix rename to hosts/nate-work/nixos/hardware-configuration.nix diff --git a/hosts/nate/default.nix b/hosts/nate/default.nix new file mode 100644 index 0000000..d6c5da4 --- /dev/null +++ b/hosts/nate/default.nix @@ -0,0 +1,142 @@ +{ config, lib, inputs, pkgs, timeZone, ... }: +let + deskCfg = config.deskCfg; +in +{ + imports = [ + ./nixos/hardware-configuration.nix + ./modules/sway/sway_conf.nix + ../../shared/modules/desktop/base.nix + ../../shared/modules/desktop/stylix.nix + ../../shared/modules/desktop/silent-boot.nix + ../../shared/modules/desktop/greetd.nix + ../../shared/modules/wm/niri.nix + ../../shared/modules/services/syncthing.nix + ../../shared/modules/services/kdeconnect.nix + ../../shared/modules/services/docker.nix + ../../shared/modules/services/tailscale.nix + ../../shared/modules/services/avahi.nix + ../../shared/modules/services/motu-m4-combined.nix + ]; + + deskCfg = { + userName = "nate"; + hostName = "winmax"; + fullName = "Nate Anderson"; + de = "niri"; + installGaming = true; + }; + + # Stylix — derive color scheme from wallpaper + stylix.image = ./wallpaper.png; + stylix.fonts.sizes = { + applications = 12; + desktop = 10; + popups = 10; + terminal = 11; + }; + + # Limit the number of generations to keep + boot.loader.systemd-boot.configurationLimit = 5; + + # Systemd initrd for faster boot + boot.initrd.systemd.enable = true; + + # Silent boot + silentBoot.enable = true; + + # Plymouth boot animation + boot.plymouth = { + enable = true; + theme = "rings"; + themePackages = with pkgs; [ + (adi1090x-plymouth-themes.override { + selected_themes = [ "rings" ]; + }) + ]; + }; + + # Perform garbage collection weekly to maintain low disk usage + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + nix.settings.auto-optimise-store = true; + + # Extra groups + main_user.extraGroups = [ "dialout" "docker" "scanner" "lp" ]; + + # Sway WM (legacy, kept for fallback) + swaywm = { + enable = deskCfg.de == "sway"; + useNonFree = true; + installGaming = deskCfg.installGaming; + systemPackages = []; + }; + + # Niri WM config + niriwm = { + enable = deskCfg.de == "niri"; + useNonFree = true; + user = deskCfg.userName; + systemPackages = []; + }; + + # Steam with remote play + gamescope + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + gamescopeSession.enable = true; + }; + + # MOTU M4 audio interface + services.motu-m4-combined = { + enable = true; + user = deskCfg.userName; + latencyMs = 10; + }; + + # ADB for Android + programs.adb.enable = true; + + # usbmuxd for iOS + services.usbmuxd.enable = true; + + # Nate-specific session variables + environment.sessionVariables = { + FIREFOX_USE_SYSTEM_THEME = "true"; + GTK_THEME = "stylix"; + }; + + # Firewall — allow dev server ports + networking.firewall = { + enable = true; + allowedTCPPorts = [ 8080 8081 ]; + }; + + # Bluetooth + hardware.bluetooth.settings.General = { + Name = "Nate-WinMax"; + Privacy = "device"; + JustWorksRepairing = "always"; + Class = "0x000100"; + }; + hardware.xpadneo.enable = true; + + # AMD GPU setup (WinMax uses AMD) + services.xserver.videoDrivers = [ "amdgpu" ]; + # Enable HIP for ROCm + systemd.tmpfiles.rules = [ + "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" + ]; + hardware.graphics = { + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ + rocmPackages.clr.icd + ]; + }; + + system.stateVersion = "23.11"; +} diff --git a/nate/dotfiles/Passwords.kdbx b/hosts/nate/dotfiles/Passwords.kdbx similarity index 100% rename from nate/dotfiles/Passwords.kdbx rename to hosts/nate/dotfiles/Passwords.kdbx diff --git a/nate/dotfiles/foot/foot.ini b/hosts/nate/dotfiles/foot/foot.ini similarity index 100% rename from nate/dotfiles/foot/foot.ini rename to hosts/nate/dotfiles/foot/foot.ini diff --git a/nate/dotfiles/macchiato.gitconfig b/hosts/nate/dotfiles/macchiato.gitconfig similarity index 100% rename from nate/dotfiles/macchiato.gitconfig rename to hosts/nate/dotfiles/macchiato.gitconfig diff --git a/nate/dotfiles/mako/config b/hosts/nate/dotfiles/mako/config similarity index 100% rename from nate/dotfiles/mako/config rename to hosts/nate/dotfiles/mako/config diff --git a/nate/dotfiles/sway/cheatsheet b/hosts/nate/dotfiles/sway/cheatsheet similarity index 100% rename from nate/dotfiles/sway/cheatsheet rename to hosts/nate/dotfiles/sway/cheatsheet diff --git a/nate/dotfiles/sway/config b/hosts/nate/dotfiles/sway/config similarity index 100% rename from nate/dotfiles/sway/config rename to hosts/nate/dotfiles/sway/config diff --git a/nate/dotfiles/sway/config.d/application_defaults b/hosts/nate/dotfiles/sway/config.d/application_defaults similarity index 100% rename from nate/dotfiles/sway/config.d/application_defaults rename to hosts/nate/dotfiles/sway/config.d/application_defaults diff --git a/nate/dotfiles/sway/config.d/autostart_applications b/hosts/nate/dotfiles/sway/config.d/autostart_applications similarity index 100% rename from nate/dotfiles/sway/config.d/autostart_applications rename to hosts/nate/dotfiles/sway/config.d/autostart_applications diff --git a/nate/dotfiles/sway/config.d/clamshell b/hosts/nate/dotfiles/sway/config.d/clamshell similarity index 100% rename from nate/dotfiles/sway/config.d/clamshell rename to hosts/nate/dotfiles/sway/config.d/clamshell diff --git a/nate/dotfiles/sway/config.d/default b/hosts/nate/dotfiles/sway/config.d/default similarity index 100% rename from nate/dotfiles/sway/config.d/default rename to hosts/nate/dotfiles/sway/config.d/default diff --git a/nate/dotfiles/sway/config.d/input b/hosts/nate/dotfiles/sway/config.d/input similarity index 100% rename from nate/dotfiles/sway/config.d/input rename to hosts/nate/dotfiles/sway/config.d/input diff --git a/nate/dotfiles/sway/config.d/output b/hosts/nate/dotfiles/sway/config.d/output similarity index 100% rename from nate/dotfiles/sway/config.d/output rename to hosts/nate/dotfiles/sway/config.d/output diff --git a/nate/dotfiles/sway/config.d/theme b/hosts/nate/dotfiles/sway/config.d/theme similarity index 100% rename from nate/dotfiles/sway/config.d/theme rename to hosts/nate/dotfiles/sway/config.d/theme diff --git a/nate/dotfiles/sway/keyboard.conf b/hosts/nate/dotfiles/sway/keyboard.conf similarity index 100% rename from nate/dotfiles/sway/keyboard.conf rename to hosts/nate/dotfiles/sway/keyboard.conf diff --git a/nate/dotfiles/sway/scripts/clamshell.sh b/hosts/nate/dotfiles/sway/scripts/clamshell.sh similarity index 100% rename from nate/dotfiles/sway/scripts/clamshell.sh rename to hosts/nate/dotfiles/sway/scripts/clamshell.sh diff --git a/nate/dotfiles/sway/scripts/import-gsettings b/hosts/nate/dotfiles/sway/scripts/import-gsettings similarity index 100% rename from nate/dotfiles/sway/scripts/import-gsettings rename to hosts/nate/dotfiles/sway/scripts/import-gsettings diff --git a/nate/dotfiles/sway/scripts/lockman.sh b/hosts/nate/dotfiles/sway/scripts/lockman.sh similarity index 100% rename from nate/dotfiles/sway/scripts/lockman.sh rename to hosts/nate/dotfiles/sway/scripts/lockman.sh diff --git a/nate/dotfiles/sway/scripts/open_project.sh b/hosts/nate/dotfiles/sway/scripts/open_project.sh similarity index 100% rename from nate/dotfiles/sway/scripts/open_project.sh rename to hosts/nate/dotfiles/sway/scripts/open_project.sh diff --git a/nate/dotfiles/sway/scripts/scale.sh b/hosts/nate/dotfiles/sway/scripts/scale.sh similarity index 100% rename from nate/dotfiles/sway/scripts/scale.sh rename to hosts/nate/dotfiles/sway/scripts/scale.sh diff --git a/nate/dotfiles/sway/scripts/screenshot.sh b/hosts/nate/dotfiles/sway/scripts/screenshot.sh similarity index 100% rename from nate/dotfiles/sway/scripts/screenshot.sh rename to hosts/nate/dotfiles/sway/scripts/screenshot.sh diff --git a/nate/dotfiles/sway/scripts/swayfader.py b/hosts/nate/dotfiles/sway/scripts/swayfader.py similarity index 100% rename from nate/dotfiles/sway/scripts/swayfader.py rename to hosts/nate/dotfiles/sway/scripts/swayfader.py diff --git a/nate/dotfiles/sway/swaylock.png b/hosts/nate/dotfiles/sway/swaylock.png similarity index 100% rename from nate/dotfiles/sway/swaylock.png rename to hosts/nate/dotfiles/sway/swaylock.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png diff --git a/nate/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg b/hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg similarity index 100% rename from nate/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg rename to hosts/nate/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg diff --git a/nate/dotfiles/sway/wallpapers/nix-black-4k.png b/hosts/nate/dotfiles/sway/wallpapers/nix-black-4k.png similarity index 100% rename from nate/dotfiles/sway/wallpapers/nix-black-4k.png rename to hosts/nate/dotfiles/sway/wallpapers/nix-black-4k.png diff --git a/nate/dotfiles/swaylock/boot-config b/hosts/nate/dotfiles/swaylock/boot-config similarity index 100% rename from nate/dotfiles/swaylock/boot-config rename to hosts/nate/dotfiles/swaylock/boot-config diff --git a/nate/dotfiles/swaylock/config b/hosts/nate/dotfiles/swaylock/config similarity index 100% rename from nate/dotfiles/swaylock/config rename to hosts/nate/dotfiles/swaylock/config diff --git a/nate/dotfiles/swaylock/idle-config b/hosts/nate/dotfiles/swaylock/idle-config similarity index 100% rename from nate/dotfiles/swaylock/idle-config rename to hosts/nate/dotfiles/swaylock/idle-config diff --git a/nate/dotfiles/swaylock/lock.png b/hosts/nate/dotfiles/swaylock/lock.png similarity index 100% rename from nate/dotfiles/swaylock/lock.png rename to hosts/nate/dotfiles/swaylock/lock.png diff --git a/nate/dotfiles/swaync/style.css b/hosts/nate/dotfiles/swaync/style.css similarity index 100% rename from nate/dotfiles/swaync/style.css rename to hosts/nate/dotfiles/swaync/style.css diff --git a/nate/dotfiles/wofi/config b/hosts/nate/dotfiles/wofi/config similarity index 100% rename from nate/dotfiles/wofi/config rename to hosts/nate/dotfiles/wofi/config diff --git a/nate/dotfiles/wofi/config.power b/hosts/nate/dotfiles/wofi/config.power similarity index 100% rename from nate/dotfiles/wofi/config.power rename to hosts/nate/dotfiles/wofi/config.power diff --git a/nate/dotfiles/wofi/config.screenshot b/hosts/nate/dotfiles/wofi/config.screenshot similarity index 100% rename from nate/dotfiles/wofi/config.screenshot rename to hosts/nate/dotfiles/wofi/config.screenshot diff --git a/nate/dotfiles/wofi/style.css b/hosts/nate/dotfiles/wofi/style.css similarity index 100% rename from nate/dotfiles/wofi/style.css rename to hosts/nate/dotfiles/wofi/style.css diff --git a/nate/dotfiles/wofi/style.widgets.css b/hosts/nate/dotfiles/wofi/style.widgets.css similarity index 100% rename from nate/dotfiles/wofi/style.widgets.css rename to hosts/nate/dotfiles/wofi/style.widgets.css diff --git a/nate/dotfiles/wofi/windows.py b/hosts/nate/dotfiles/wofi/windows.py similarity index 100% rename from nate/dotfiles/wofi/windows.py rename to hosts/nate/dotfiles/wofi/windows.py diff --git a/nate/linked-dotfiles/niri/config.kdl b/hosts/nate/linked-dotfiles/niri/config.kdl similarity index 100% rename from nate/linked-dotfiles/niri/config.kdl rename to hosts/nate/linked-dotfiles/niri/config.kdl diff --git a/hosts/nate/modules/home-manager/home.nix b/hosts/nate/modules/home-manager/home.nix new file mode 100644 index 0000000..ce69263 --- /dev/null +++ b/hosts/nate/modules/home-manager/home.nix @@ -0,0 +1,179 @@ +{ inputs, config, pkgs, lib, osConfig, ... }: +let + unstable = import inputs.nixpkgs-unstable { + system = "x86_64-linux"; + config.allowUnfree = true; + }; +in +{ + imports = [ + ../../../../shared/modules/home-manager/base-home.nix + ]; + + baseHome = { + enable = true; + userName = "nate"; + fullName = "Nathan Anderson"; + email = "n8r@tuta.io"; + stateVersion = "23.11"; + hostDir = "nate"; + }; + + # Zsh — add direnv hook + yt-audio function + programs.zsh.initContent = '' + eval "$(direnv hook zsh)" + + yt-audio() { + nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3" + } + ''; + + # Additional programs + programs.direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + }; + programs.delta = { + enable = true; + enableGitIntegration = true; + options = { + side-by-side = true; + hyperlinks = true; + }; + }; + + # Git — SSH rewrite for GitHub + programs.git.settings.url = { + "git@github.com:" = { + insteadOf = "https://github.com/"; + }; + }; + + # KDEConnect (HM-level indicator) + services.kdeconnect = { + enable = true; + indicator = true; + }; + + # Git autosync for star-command + services.git-autosync = { + enable = true; + repos.star-command = { + path = "/home/nate/source/star-command"; + gitName = "Nathan Anderson"; + gitEmail = "n8r@tuta.io"; + }; + }; + + # Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset) + noctaliaShell = { + enable = true; + settings = { + bar.position = "top"; + colorSchemes = { + darkMode = true; + useWallpaperColors = true; + }; + location.name = "Denver"; + general.avatarImage = "/home/nate/.face"; + }; + }; + + # Additional user packages + home.packages = with pkgs; [ + # + # Dev Tools + # + docker + unstable.godot + jq + python3 + unstable.claude-code + usbutils + openscad + ### LSP's + nil + nodePackages_latest.bash-language-server + vscode-langservers-extracted + python313Packages.python-lsp-server + + # + # Gaming + # + mumble + mangohud + wine-wayland + + # + # Unix tools + # + duf + dust + fd + ripgrep + gtop + + # + # Photo / Video + # + unstable.davinci-resolve-studio + obs-studio + imv + ffmpeg + + # + # Other + # + kdePackages.filelight + simple-scan + tailscale-systray + + # + # Additional fonts + # + unstable.nerd-fonts.hurmit + unstable.nerd-fonts.overpass + recursive + ]; + + # Local dotfiles (host-specific, override shared) + home.file = lib.mkMerge [ + ( + let + localDotfilesPath = ../../dotfiles; + in + if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != { } then + builtins.listToAttrs ( + map (name: { + name = "${config.xdg.configHome}/${name}"; + value = { + source = localDotfilesPath + "/${name}"; + }; + }) (builtins.attrNames (builtins.readDir localDotfilesPath)) + ) + else + { } + ) + ]; + + # Configure default applications for opening links + xdg.mimeApps = { + enable = true; + defaultApplications = { + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + "x-scheme-handler/about" = "firefox.desktop"; + "x-scheme-handler/unknown" = "firefox.desktop"; + }; + }; + + # Cava audio visualizer + programs.cava = { + enable = true; + settings = { + smoothing.noise_reduction = 55; + }; + }; +} diff --git a/nate/modules/sway/sway_conf.nix b/hosts/nate/modules/sway/sway_conf.nix similarity index 100% rename from nate/modules/sway/sway_conf.nix rename to hosts/nate/modules/sway/sway_conf.nix diff --git a/nate/nixos/hardware-configuration.nix b/hosts/nate/nixos/hardware-configuration.nix similarity index 100% rename from nate/nixos/hardware-configuration.nix rename to hosts/nate/nixos/hardware-configuration.nix diff --git a/nate/wallpaper.png b/hosts/nate/wallpaper.png similarity index 100% rename from nate/wallpaper.png rename to hosts/nate/wallpaper.png diff --git a/scrappy/default.nix b/hosts/scrappy/default.nix similarity index 100% rename from scrappy/default.nix rename to hosts/scrappy/default.nix diff --git a/scrappy/desktop-configuration.nix b/hosts/scrappy/desktop-configuration.nix similarity index 100% rename from scrappy/desktop-configuration.nix rename to hosts/scrappy/desktop-configuration.nix diff --git a/scrappy/dotfiles/Passwords.kdbx b/hosts/scrappy/dotfiles/Passwords.kdbx similarity index 100% rename from scrappy/dotfiles/Passwords.kdbx rename to hosts/scrappy/dotfiles/Passwords.kdbx diff --git a/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme b/hosts/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme similarity index 100% rename from scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme rename to hosts/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme diff --git a/scrappy/dotfiles/foot/foot.ini b/hosts/scrappy/dotfiles/foot/foot.ini similarity index 100% rename from scrappy/dotfiles/foot/foot.ini rename to hosts/scrappy/dotfiles/foot/foot.ini diff --git a/scrappy/dotfiles/helix/config.toml b/hosts/scrappy/dotfiles/helix/config.toml similarity index 100% rename from scrappy/dotfiles/helix/config.toml rename to hosts/scrappy/dotfiles/helix/config.toml diff --git a/scrappy/dotfiles/helix/languages.toml b/hosts/scrappy/dotfiles/helix/languages.toml similarity index 100% rename from scrappy/dotfiles/helix/languages.toml rename to hosts/scrappy/dotfiles/helix/languages.toml diff --git a/scrappy/dotfiles/hypr/nix.png b/hosts/scrappy/dotfiles/hypr/nix.png similarity index 100% rename from scrappy/dotfiles/hypr/nix.png rename to hosts/scrappy/dotfiles/hypr/nix.png diff --git a/scrappy/dotfiles/kak-lsp/kak-lsp.toml b/hosts/scrappy/dotfiles/kak-lsp/kak-lsp.toml similarity index 100% rename from scrappy/dotfiles/kak-lsp/kak-lsp.toml rename to hosts/scrappy/dotfiles/kak-lsp/kak-lsp.toml diff --git a/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak b/hosts/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/catppuccin_frappe.kak rename to hosts/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak diff --git a/scrappy/dotfiles/kak/colors/catppuccin_latte.kak b/hosts/scrappy/dotfiles/kak/colors/catppuccin_latte.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/catppuccin_latte.kak rename to hosts/scrappy/dotfiles/kak/colors/catppuccin_latte.kak diff --git a/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak b/hosts/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak rename to hosts/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak diff --git a/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak b/hosts/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/catppuccin_mocha.kak rename to hosts/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak diff --git a/scrappy/dotfiles/kak/colors/nord.kak b/hosts/scrappy/dotfiles/kak/colors/nord.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/nord.kak rename to hosts/scrappy/dotfiles/kak/colors/nord.kak diff --git a/scrappy/dotfiles/kak/colors/pastel.kak b/hosts/scrappy/dotfiles/kak/colors/pastel.kak similarity index 100% rename from scrappy/dotfiles/kak/colors/pastel.kak rename to hosts/scrappy/dotfiles/kak/colors/pastel.kak diff --git a/scrappy/dotfiles/kak/kakrc b/hosts/scrappy/dotfiles/kak/kakrc similarity index 100% rename from scrappy/dotfiles/kak/kakrc rename to hosts/scrappy/dotfiles/kak/kakrc diff --git a/scrappy/dotfiles/kak/rc/close_tag.kak b/hosts/scrappy/dotfiles/kak/rc/close_tag.kak similarity index 100% rename from scrappy/dotfiles/kak/rc/close_tag.kak rename to hosts/scrappy/dotfiles/kak/rc/close_tag.kak diff --git a/scrappy/dotfiles/kak/rc/fzf_git.kak b/hosts/scrappy/dotfiles/kak/rc/fzf_git.kak similarity index 100% rename from scrappy/dotfiles/kak/rc/fzf_git.kak rename to hosts/scrappy/dotfiles/kak/rc/fzf_git.kak diff --git a/scrappy/dotfiles/keepassxc/keepassxc.ini b/hosts/scrappy/dotfiles/keepassxc/keepassxc.ini similarity index 100% rename from scrappy/dotfiles/keepassxc/keepassxc.ini rename to hosts/scrappy/dotfiles/keepassxc/keepassxc.ini diff --git a/scrappy/dotfiles/kitty/kitty.conf b/hosts/scrappy/dotfiles/kitty/kitty.conf similarity index 100% rename from scrappy/dotfiles/kitty/kitty.conf rename to hosts/scrappy/dotfiles/kitty/kitty.conf diff --git a/scrappy/dotfiles/macchiato.gitconfig b/hosts/scrappy/dotfiles/macchiato.gitconfig similarity index 100% rename from scrappy/dotfiles/macchiato.gitconfig rename to hosts/scrappy/dotfiles/macchiato.gitconfig diff --git a/scrappy/dotfiles/mako/config b/hosts/scrappy/dotfiles/mako/config similarity index 100% rename from scrappy/dotfiles/mako/config rename to hosts/scrappy/dotfiles/mako/config diff --git a/scrappy/dotfiles/nwg-hello/greet-hyprland.conf b/hosts/scrappy/dotfiles/nwg-hello/greet-hyprland.conf similarity index 100% rename from scrappy/dotfiles/nwg-hello/greet-hyprland.conf rename to hosts/scrappy/dotfiles/nwg-hello/greet-hyprland.conf diff --git a/scrappy/dotfiles/sway/cheatsheet b/hosts/scrappy/dotfiles/sway/cheatsheet similarity index 100% rename from scrappy/dotfiles/sway/cheatsheet rename to hosts/scrappy/dotfiles/sway/cheatsheet diff --git a/scrappy/dotfiles/sway/config b/hosts/scrappy/dotfiles/sway/config similarity index 100% rename from scrappy/dotfiles/sway/config rename to hosts/scrappy/dotfiles/sway/config diff --git a/scrappy/dotfiles/sway/config.d/application_defaults b/hosts/scrappy/dotfiles/sway/config.d/application_defaults similarity index 100% rename from scrappy/dotfiles/sway/config.d/application_defaults rename to hosts/scrappy/dotfiles/sway/config.d/application_defaults diff --git a/scrappy/dotfiles/sway/config.d/autostart_applications b/hosts/scrappy/dotfiles/sway/config.d/autostart_applications similarity index 100% rename from scrappy/dotfiles/sway/config.d/autostart_applications rename to hosts/scrappy/dotfiles/sway/config.d/autostart_applications diff --git a/scrappy/dotfiles/sway/config.d/clamshell b/hosts/scrappy/dotfiles/sway/config.d/clamshell similarity index 100% rename from scrappy/dotfiles/sway/config.d/clamshell rename to hosts/scrappy/dotfiles/sway/config.d/clamshell diff --git a/scrappy/dotfiles/sway/config.d/default b/hosts/scrappy/dotfiles/sway/config.d/default similarity index 100% rename from scrappy/dotfiles/sway/config.d/default rename to hosts/scrappy/dotfiles/sway/config.d/default diff --git a/scrappy/dotfiles/sway/config.d/input b/hosts/scrappy/dotfiles/sway/config.d/input similarity index 100% rename from scrappy/dotfiles/sway/config.d/input rename to hosts/scrappy/dotfiles/sway/config.d/input diff --git a/scrappy/dotfiles/sway/config.d/output b/hosts/scrappy/dotfiles/sway/config.d/output similarity index 100% rename from scrappy/dotfiles/sway/config.d/output rename to hosts/scrappy/dotfiles/sway/config.d/output diff --git a/scrappy/dotfiles/sway/config.d/theme b/hosts/scrappy/dotfiles/sway/config.d/theme similarity index 100% rename from scrappy/dotfiles/sway/config.d/theme rename to hosts/scrappy/dotfiles/sway/config.d/theme diff --git a/scrappy/dotfiles/sway/keyboard.conf b/hosts/scrappy/dotfiles/sway/keyboard.conf similarity index 100% rename from scrappy/dotfiles/sway/keyboard.conf rename to hosts/scrappy/dotfiles/sway/keyboard.conf diff --git a/scrappy/dotfiles/sway/scripts/clamshell.sh b/hosts/scrappy/dotfiles/sway/scripts/clamshell.sh similarity index 100% rename from scrappy/dotfiles/sway/scripts/clamshell.sh rename to hosts/scrappy/dotfiles/sway/scripts/clamshell.sh diff --git a/scrappy/dotfiles/sway/scripts/import-gsettings b/hosts/scrappy/dotfiles/sway/scripts/import-gsettings similarity index 100% rename from scrappy/dotfiles/sway/scripts/import-gsettings rename to hosts/scrappy/dotfiles/sway/scripts/import-gsettings diff --git a/scrappy/dotfiles/sway/scripts/lockman.sh b/hosts/scrappy/dotfiles/sway/scripts/lockman.sh similarity index 100% rename from scrappy/dotfiles/sway/scripts/lockman.sh rename to hosts/scrappy/dotfiles/sway/scripts/lockman.sh diff --git a/scrappy/dotfiles/sway/scripts/scale.sh b/hosts/scrappy/dotfiles/sway/scripts/scale.sh similarity index 100% rename from scrappy/dotfiles/sway/scripts/scale.sh rename to hosts/scrappy/dotfiles/sway/scripts/scale.sh diff --git a/scrappy/dotfiles/sway/scripts/screenshot.sh b/hosts/scrappy/dotfiles/sway/scripts/screenshot.sh similarity index 100% rename from scrappy/dotfiles/sway/scripts/screenshot.sh rename to hosts/scrappy/dotfiles/sway/scripts/screenshot.sh diff --git a/scrappy/dotfiles/sway/scripts/swayfader.py b/hosts/scrappy/dotfiles/sway/scripts/swayfader.py similarity index 100% rename from scrappy/dotfiles/sway/scripts/swayfader.py rename to hosts/scrappy/dotfiles/sway/scripts/swayfader.py diff --git a/scrappy/dotfiles/sway/swaylock.png b/hosts/scrappy/dotfiles/sway/swaylock.png similarity index 100% rename from scrappy/dotfiles/sway/swaylock.png rename to hosts/scrappy/dotfiles/sway/swaylock.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg b/hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg rename to hosts/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg diff --git a/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png b/hosts/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png similarity index 100% rename from scrappy/dotfiles/sway/wallpapers/nix-black-4k.png rename to hosts/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png diff --git a/scrappy/dotfiles/swaylock/boot-config b/hosts/scrappy/dotfiles/swaylock/boot-config similarity index 100% rename from scrappy/dotfiles/swaylock/boot-config rename to hosts/scrappy/dotfiles/swaylock/boot-config diff --git a/scrappy/dotfiles/swaylock/config b/hosts/scrappy/dotfiles/swaylock/config similarity index 100% rename from scrappy/dotfiles/swaylock/config rename to hosts/scrappy/dotfiles/swaylock/config diff --git a/scrappy/dotfiles/swaylock/lock.png b/hosts/scrappy/dotfiles/swaylock/lock.png similarity index 100% rename from scrappy/dotfiles/swaylock/lock.png rename to hosts/scrappy/dotfiles/swaylock/lock.png diff --git a/scrappy/dotfiles/vis/config b/hosts/scrappy/dotfiles/vis/config similarity index 100% rename from scrappy/dotfiles/vis/config rename to hosts/scrappy/dotfiles/vis/config diff --git a/scrappy/dotfiles/vis/vis.log b/hosts/scrappy/dotfiles/vis/vis.log similarity index 100% rename from scrappy/dotfiles/vis/vis.log rename to hosts/scrappy/dotfiles/vis/vis.log diff --git a/scrappy/dotfiles/waybar/config b/hosts/scrappy/dotfiles/waybar/config similarity index 100% rename from scrappy/dotfiles/waybar/config rename to hosts/scrappy/dotfiles/waybar/config diff --git a/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh b/hosts/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh similarity index 100% rename from scrappy/dotfiles/waybar/scripts/keyboard_layout.sh rename to hosts/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh diff --git a/scrappy/dotfiles/waybar/scripts/power-menu.sh b/hosts/scrappy/dotfiles/waybar/scripts/power-menu.sh similarity index 100% rename from scrappy/dotfiles/waybar/scripts/power-menu.sh rename to hosts/scrappy/dotfiles/waybar/scripts/power-menu.sh diff --git a/scrappy/dotfiles/waybar/style.css b/hosts/scrappy/dotfiles/waybar/style.css similarity index 100% rename from scrappy/dotfiles/waybar/style.css rename to hosts/scrappy/dotfiles/waybar/style.css diff --git a/scrappy/dotfiles/wofi/config b/hosts/scrappy/dotfiles/wofi/config similarity index 100% rename from scrappy/dotfiles/wofi/config rename to hosts/scrappy/dotfiles/wofi/config diff --git a/scrappy/dotfiles/wofi/config.power b/hosts/scrappy/dotfiles/wofi/config.power similarity index 100% rename from scrappy/dotfiles/wofi/config.power rename to hosts/scrappy/dotfiles/wofi/config.power diff --git a/scrappy/dotfiles/wofi/config.screenshot b/hosts/scrappy/dotfiles/wofi/config.screenshot similarity index 100% rename from scrappy/dotfiles/wofi/config.screenshot rename to hosts/scrappy/dotfiles/wofi/config.screenshot diff --git a/scrappy/dotfiles/wofi/style.css b/hosts/scrappy/dotfiles/wofi/style.css similarity index 100% rename from scrappy/dotfiles/wofi/style.css rename to hosts/scrappy/dotfiles/wofi/style.css diff --git a/scrappy/dotfiles/wofi/style.widgets.css b/hosts/scrappy/dotfiles/wofi/style.widgets.css similarity index 100% rename from scrappy/dotfiles/wofi/style.widgets.css rename to hosts/scrappy/dotfiles/wofi/style.widgets.css diff --git a/scrappy/dotfiles/wofi/windows.py b/hosts/scrappy/dotfiles/wofi/windows.py similarity index 100% rename from scrappy/dotfiles/wofi/windows.py rename to hosts/scrappy/dotfiles/wofi/windows.py diff --git a/scrappy/hardware-configuration.nix b/hosts/scrappy/hardware-configuration.nix similarity index 100% rename from scrappy/hardware-configuration.nix rename to hosts/scrappy/hardware-configuration.nix diff --git a/scrappy/modules/home-manager/home.nix b/hosts/scrappy/modules/home-manager/home.nix similarity index 100% rename from scrappy/modules/home-manager/home.nix rename to hosts/scrappy/modules/home-manager/home.nix diff --git a/scrappy/modules/niri/niri_conf.nix b/hosts/scrappy/modules/niri/niri_conf.nix similarity index 100% rename from scrappy/modules/niri/niri_conf.nix rename to hosts/scrappy/modules/niri/niri_conf.nix diff --git a/scrappy/modules/sway/sway_conf.nix b/hosts/scrappy/modules/sway/sway_conf.nix similarity index 100% rename from scrappy/modules/sway/sway_conf.nix rename to hosts/scrappy/modules/sway/sway_conf.nix diff --git a/jaci/default.nix b/jaci/default.nix deleted file mode 100644 index 0624558..0000000 --- a/jaci/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }: - let - userName = "jaci"; - fullName = "Jaci Anderson"; - email = "jaci.s.anderson@gmail.com"; - hostName = "jaci"; - desktop = "niri"; - gaming = true; - in -{ - imports = [ - inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel - ./desktop-configuration.nix - ./nixos/hardware-configuration.nix - ]; - - deskCfg = { - userName = userName; - hostName = hostName; - fullName = fullName; - de = desktop; - installGaming = gaming; - flakePath = "/home/${userName}/nixos"; - }; - - # Limit the number of generations to keep - boot.loader.systemd-boot.configurationLimit = 5; - - # Perform garbage collection weekly to maintain low disk usage - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 21d"; - }; - - # Optimize storage - # You can also manually optimize the store via: - # nix-store --optimise - # Refer to the following link for more details: - # https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store - nix.settings.auto-optimise-store = true; -} diff --git a/jaci/desktop-configuration.nix b/jaci/desktop-configuration.nix deleted file mode 100644 index eb9bf67..0000000 --- a/jaci/desktop-configuration.nix +++ /dev/null @@ -1,232 +0,0 @@ -{ - config, - lib, - inputs, - outputs, - pkgs, - timeZone, - system, - ... -}: -let - supportedDesktops = [ "niri" ]; - supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; - deskCfg = config.deskCfg; -in -{ - options.deskCfg = { - de = lib.mkOption { - default = "niri"; - type = lib.types.str; - description = "Desktop Environment"; - }; - userName = lib.mkOption { - type = lib.types.str; - description = "Main username for system"; - }; - hostName = lib.mkOption { - type = lib.types.str; - description = "Hostname for system"; - }; - fullName = lib.mkOption { - type = lib.types.str; - default = "User"; - description = "Full display name for the user"; - }; - installGaming = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to install gaming software or not"; - }; - flakePath = lib.mkOption { - type = lib.types.str; - description = "Absolute path to the NixOS flake configuration directory"; - }; - }; - - imports = [ - ../shared/modules/user/main_user.nix - modules/niri/niri_conf.nix - ../shared/modules/system/power_manager.nix - ../shared/modules/system/noctalia-system.nix - ]; - - config = { - assertions = [ - { - assertion = builtins.elem deskCfg.de supportedDesktops; - message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}"; - } - ]; - - # Stylix theming - auto-generated light theme from wallpaper - stylix = { - enable = true; - # image = ./kiki_background.jpg; - base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml"; - polarity = "light"; - # System-wide cursor - cursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 32; - }; - # Fonts - fonts = { - serif = { - package = pkgs.lato; - name = "Lato"; - }; - sansSerif = { - package = pkgs.lato; - name = "Lato"; - }; - monospace = { - package = pkgs.maple-mono.NF; - name = "Maple Mono NF"; - }; - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - sizes = { - applications = 14; - desktop = 14; - popups = 14; - terminal = 14; - }; - }; - - # Icon theme for tray applets (nm-applet, etc.) - # Note: "Reversal-dark" has dark icons (for light backgrounds) - # "Reversal" has light icons (for dark backgrounds) - iconTheme = { - enable = true; - package = pkgs.reversal-icon-theme; - light = "Reversal-dark"; - dark = "Reversal"; - }; - - targets = { - # Disable plymouth styling (use custom) - plymouth.enable = false; - }; - }; - - nixpkgs.overlays = [ - inputs.nur.overlays.default - ]; - - # Intel graphics acceleration (Framework 12) - hardware.graphics.enable = true; - hardware.enableRedistributableFirmware = true; - - # Enable flakes feature - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - nixpkgs.config.allowUnfree = true; - - boot = { - plymouth = { - enable = true; - theme = "kiki-pixel"; # Options: "kiki" or "kiki-pixel" (pixel art) - themePackages = [ - (pkgs.runCommand "plymouth-kiki-theme" { } '' - mkdir -p $out/share/plymouth/themes/kiki - cp -r ${./kiki-plymouth-theme/kiki}/* $out/share/plymouth/themes/kiki/ - substituteInPlace $out/share/plymouth/themes/kiki/kiki.plymouth \ - --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki" - # substituteInPlace $out/share/plymouth/themes/kiki/kiki.script \ - # --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki" - '') - (pkgs.runCommand "plymouth-kiki-pixel-theme" { } '' - mkdir -p $out/share/plymouth/themes/kiki-pixel - cp -r ${./kiki-plymouth-theme/kiki-pixel}/* $out/share/plymouth/themes/kiki-pixel/ - substituteInPlace $out/share/plymouth/themes/kiki-pixel/kiki-pixel.plymouth \ - --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki-pixel" - # substituteInPlace $out/share/plymouth/themes/kiki-pixel/kiki-pixel.script \ - # --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki-pixel" - '') - ]; - }; - - # Enable systemd in initrd for better LUKS unlocking with Plymouth - initrd.systemd.enable = true; - - # Enable "Silent Boot" - consoleLogLevel = 0; - initrd.verbose = false; - kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" - "loglevel=3" - "rd.systemd.show_status=false" - "rd.udev.log_level=3" - "udev.log_priority=3" - ]; - # Hide the OS choice for bootloaders. - loader.timeout = 1; - # Use the systemd-boot EFI boot loader. - loader.systemd-boot.enable = true; - loader.efi.canTouchEfiVariables = true; - # Use latest kernel packages - kernelPackages = pkgs.linuxPackages_latest; - }; - - networking.hostName = deskCfg.hostName; - networking.networkmanager.enable = true; - networking.wireless.iwd.enable = true; - - time.timeZone = timeZone; - - main_user = { - enable = true; - userName = deskCfg.userName; - fullName = deskCfg.fullName; - isDesktopUser = true; - extraGroups = [ "corectrl" ]; - }; - - power_manager = { - enable = true; - backend = "power-profiles-daemon"; # Required for Noctalia power profile widget - }; - - # Enable Noctalia shell system services - noctaliaSystem.enable = true; - - niriwm = { - enable = true; - useNonFree = true; - user = deskCfg.userName; - installGaming = deskCfg.installGaming; - systemPackages = with pkgs; [ - libreoffice - ]; - }; - - environment.systemPackages = with pkgs; [ - cryptsetup - ]; - - programs.niri.enable = true; - # For electron apps in wayland - environment.sessionVariables.NIXOS_OZONE_WL = "1"; - - services.greetd = { - enable = true; - settings = rec { - initial_session = { - command = "${pkgs.niri}/bin/niri-session"; - user = deskCfg.userName; - }; - default_session = initial_session; - }; - }; - - system.stateVersion = "23.11"; - }; -} diff --git a/nate-work/default.nix b/nate-work/default.nix deleted file mode 100644 index f5cf044..0000000 --- a/nate-work/default.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }: - let - userName = "nate"; - fullName = "Nate Anderson"; - email = "nate.anderson@vasion.com"; - hostName = "nate-vasion"; - desktop = "niri"; - gaming = true; - in -{ - imports = [ - ./desktop-configuration.nix - ./nixos/hardware-configuration.nix - ./nixos/auto-update.nix - ]; - - deskCfg = { - userName = userName; - hostName = hostName; - fullName = fullName; - de = desktop; - installGaming = gaming; - flakePath = "/home/${userName}/nixos"; - }; - - # Limit the number of generations to keep - boot.loader.systemd-boot.configurationLimit = 5; - - # Systemd initrd for faster boot - boot.initrd.systemd.enable = true; - - # Plymouth boot animation - boot.plymouth = { - enable = true; - theme = "rings"; - themePackages = with pkgs; [ - (adi1090x-plymouth-themes.override { - selected_themes = [ "rings" ]; - }) - ]; - }; - - # Silent boot - boot.consoleLogLevel = 0; - boot.initrd.verbose = false; - boot.kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" - "loglevel=3" - "rd.systemd.show_status=false" - "rd.udev.log_level=3" - "udev.log_priority=3" - ]; - boot.loader.timeout = 0; - - # Perform garbage collection weekly to maintain low disk usage - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 14d"; - }; - - autoCfg = { - userName = userName; - flakePath = "/home/${userName}/nixos"; - hostName = hostName; - }; - - services.clamav.daemon.enable = true; - services.clamav.scanner.enable = true; - - nix.settings.auto-optimise-store = true; -} diff --git a/nate-work/desktop-configuration.nix b/nate-work/desktop-configuration.nix deleted file mode 100644 index c49f9f9..0000000 --- a/nate-work/desktop-configuration.nix +++ /dev/null @@ -1,207 +0,0 @@ -{ - config, - lib, - inputs, - outputs, - pkgs, - timeZone, - system, - ... -}: -let - supportedDesktops = [ - "sway" - "hyprland" - "niri" - ]; - supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; - deskCfg = config.deskCfg; -in -{ - options.deskCfg = { - de = lib.mkOption { - default = "niri"; - type = lib.types.str; - description = "Desktop Environment"; - }; - userName = lib.mkOption { - type = lib.types.str; - description = "Main username for system"; - }; - hostName = lib.mkOption { - type = lib.types.str; - description = "Hostname for system"; - }; - fullName = lib.mkOption { - type = lib.types.str; - default = "User"; - description = "Full display name for the user"; - }; - installGaming = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to install gaming software or not"; - }; - flakePath = lib.mkOption { - type = lib.types.str; - description = "Absolute path to the NixOS flake configuration directory"; - }; - }; - - imports = [ - ../shared/modules/user/main_user.nix - modules/sway/sway_conf.nix - modules/hypr/hyprland.nix - modules/niri/niri_conf.nix - ../shared/modules/system/power_manager.nix - ../shared/modules/system/noctalia-system.nix - ../shared/modules/services/motu-m4-combined.nix - # ../shared/modules/services/theme_switcher/default.nix - # inputs.nur.hmModules.nur - ]; - - config = { - assertions = [ - { - assertion = builtins.elem deskCfg.de supportedDesktops; - message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}"; - } - ]; - - # Stylix theming - auto-generate color scheme from wallpaper - stylix = { - enable = true; - image = ./bot-wallpaper.jpg; - - # Check with `nix build nixpkgs#base16-schemes && ls result/share/themes` - base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml"; - polarity = "dark"; - - # System-wide cursor - cursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 32; - }; - - # Fonts - fonts = { - serif = { - package = pkgs.lato; - name = "Lato"; - }; - sansSerif = { - package = pkgs.lato; - name = "Lato"; - }; - monospace = { - package = pkgs.maple-mono.NF; - name = "Maple Mono NF"; - }; - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - sizes = { - applications = 14; - desktop = 16; - popups = 14; - terminal = 14; - }; - }; - - iconTheme = { - enable = true; - package = pkgs.papirus-icon-theme; - light = "Papirus-Light"; - dark = "Papirus-Dark"; - }; - - targets = { - # Let plymouth use its own theme - plymouth.enable = false; - }; - }; - - nixpkgs.overlays = [ - inputs.nur.overlays.default - ]; - - # Enable flakes feature - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - # boot.plymouth.enable = true; - - networking.hostName = deskCfg.hostName; # Define your hostname. - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - time.timeZone = timeZone; - - hardware.sane = { - enable = true; - brscan5.enable = true; - }; - - power_manager = { - enable = true; - backend = "power-profiles-daemon"; # Required for Noctalia power profile widget - }; - - # Enable Noctalia shell system services - noctaliaSystem.enable = true; - - main_user = { - enable = true; - userName = deskCfg.userName; - fullName = deskCfg.fullName; - isDesktopUser = true; - extraGroups = [ - "dialout" - "docker" - "i2c" - "lp" - "scanner" - "syncthing" - ]; - }; - - swaywm = { - enable = false; - useNonFree = true; - installGaming = deskCfg.installGaming; - systemPackages = with pkgs; [ - libreoffice - ]; - }; - - hypr = { - enable = false; - user = deskCfg.userName; - systemPackages = with pkgs; [ - libreoffice - ]; - }; - - niriwm = { - enable = true; - useNonFree = true; - user = deskCfg.userName; - systemPackages = with pkgs; [ - libreoffice - ]; - }; - - services.motu-m4-combined = { - enable = true; - user = deskCfg.userName; - }; - - system.stateVersion = "23.11"; # Did you read the comment? - }; -} diff --git a/nate-work/dotfiles/kanshi/config b/nate-work/dotfiles/kanshi/config deleted file mode 100644 index 8e94bf7..0000000 --- a/nate-work/dotfiles/kanshi/config +++ /dev/null @@ -1,26 +0,0 @@ -# Kanshi configuration for nate-work -# Automatic display configuration based on connected monitors - -# Profile: Laptop only (no external monitors) -profile laptop-only { - output eDP-1 mode 2560x1600@165Hz position 0,0 scale 1.00 -} - -# Profile: Laptop + LG ULTRAGEAR+ -profile lg-ultragear { - output "LG Electronics LG ULTRAGEAR+ 406NTJJ6B876" mode 3840x2160@144.05Hz position 0,0 scale 1.00 adaptive_sync on - output eDP-1 disable -} - -# Profile: Work Ultrawide -profile work-ultrawide { - output "LG Electronics LG HDR WQHD 404MXNU37415" mode 3440x1440@99.98Hz position 0,0 scale 1.00 adaptive_sync on - output eDP-1 disable -} - -# Profile: Laptop + Ultrawide (eDP-2) -profile ultrawide-2 { - output eDP-2 mode 3440x1440@99.98Hz position 0,0 scale 1.00 adaptive_sync on - output eDP-1 disable -} - diff --git a/nate-work/modules/niri/niri_conf.nix b/nate-work/modules/niri/niri_conf.nix deleted file mode 100644 index 07d23f7..0000000 --- a/nate-work/modules/niri/niri_conf.nix +++ /dev/null @@ -1,379 +0,0 @@ -{ inputs, lib, config, pkgs, userName, ... }: - let - unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; }; - isOnTheGo = builtins.elem "on-the-go" config.system.nixos.tags; - in -{ - options.niriwm = { - enable = lib.mkEnableOption "Enable niri window manager."; - useNonFree = lib.mkOption { - default = false; - example = true; - description = "Whether to enable non-free software in the niri config"; - }; - systemPackages = lib.mkOption { - default = []; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - user = lib.mkOption { - type = lib.types.str; - }; - - }; - - ### - ## Configuration - ### - config = lib.mkIf config.niriwm.enable { - - nixpkgs.config.allowUnfree = config.niriwm.useNonFree; - - # Portal config: programs.niri.enable adds xdg-desktop-portal-gnome - # and niri-portals.conf via configPackages, but the portal daemon - # doesn't reliably pick up configPackages files. Setting config - # explicitly ensures ScreenCast routes to the GNOME portal. - xdg.portal.config.niri = { - default = [ "gnome" "gtk" ]; - "org.freedesktop.impl.portal.Access" = [ "gtk" ]; - "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; - "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; - }; - xdg.sounds.enable = true; - - ### - ## System Packages - ### - environment.systemPackages = with pkgs; lib.lists.flatten [ - [ - bash - egl-wayland - foot - unstable.ghostty - git - glib # gsettings - grim - libnotify - man-pages - man-pages-posix - nbfc-linux - nautilus - # networkmanagerapplet # Noctalia handles wifi - pavucontrol - slurp - syncthingtray - swaylock - wl-clipboard - waybar - wdisplays - wofi - xdg-utils - zsh - lxqt.lxqt-policykit - unstable.xwayland-satellite - kanshi - # Fonts - ] - config.niriwm.systemPackages - ]; - environment.variables.QT_STYLE_OVERRIDE = "kvantum"; - environment.sessionVariables = { - # use wayland - MOZ_ENABLE_WAYLAND = "1"; - FIREFOX_USE_SYSTEM_THEME = "true"; - # QT_QPA_PLATFORM and GDK_BACKEND must NOT be set - they break the screencast portal - WLR_NO_HARDWARE_CURSORS = "1"; - ELECTRON_OZONE_PLATFORM_HINT = "auto"; - NIXOS_OZONE_WL = "1"; - # For NVIDIA - only enable if not using on-the-go - GBM_BACKEND = if isOnTheGo then "" else "nvidia-drm"; - __GLX_VENDOR_LIBRARY_NAME = if isOnTheGo then "" else "nvidia"; - }; - - # adds additional man pages - documentation.dev.enable = true; - - programs.steam = { - enable = true; - gamescopeSession.enable = true; - }; - programs.gamemode = { - enable = true; - settings = { - general = { - reaper_freq = 5; - desiredgov = "performance"; - softrealtime = "auto"; - }; - }; - }; - programs.kdeconnect.enable = true; - programs.niri.enable = true; - programs.virt-manager.enable = true; - programs.xfconf.enable = true; - programs.regreet.enable = true; - programs.zsh.enable = true; - programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead - - # For nautilus - services.gnome.sushi.enable = true; - programs.nautilus-open-any-terminal = { - enable = true; - terminal = "ghostty"; - }; - - services.syncthing = { - enable = true; - dataDir = "/home/${config.niriwm.user}/.syncthing"; - openDefaultPorts = true; - user = config.niriwm.user; - }; - systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder - - # Set zsh as the default shell system-wide - users.defaultUserShell = pkgs.zsh; - environment.shells = with pkgs; [ zsh bash ]; - - ### - ## Services - ### - virtualisation = { - docker = { - enable = true; - enableOnBoot = true; - package = unstable.docker_25; - }; - libvirtd = { - enable = true; - qemu = { - swtpm.enable = true; - }; - }; - spiceUSBRedirection.enable = true; - }; - boot.initrd.supportedFilesystems = { nfs = true; }; - users.groups.libvirtd.members = ["nate"]; - - # services.blueman.enable = true; # Noctalia handles bluetooth - services.gvfs.enable = true; # file manager mount, trash, etc - services.tumbler.enable = true; # thunar thumbnails - services.openssh.enable = true; - services.dbus.enable = true; - services.gnome.gnome-keyring.enable = true; - services.flatpak.enable = true; - services.usbmuxd.enable = true; - - # For yubioath desktop - services.pcscd.enable = true; - - # Printing - services.printing = { - enable = true; - browsing = true; - drivers = [ pkgs.brlaser ]; - }; - - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - - services.fprintd.enable = true; - services.greetd = { - enable = true; - settings = rec { - initial_session = { - command = "${pkgs.niri}/bin/niri-session"; - user = config.niriwm.user; - }; - default_session = initial_session; - }; - }; - # disable lid switch sleep when plugged into power, laptop docked - services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; - - # Keyring setup - security.pam.services.greetd.enableGnomeKeyring = true; - security.pam.services.login.enableGnomeKeyring = true; - - # Audio - Modern PipeWire setup for Framework laptop - # Disable PulseAudio in favor of PipeWire - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - audio.enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - wireplumber.extraConfig = { - "wireplumber.settings" = { - bluetooth.autoswitch-to-headset-profile = false; - }; - bluetoothEnhancements = { - "monitor.bluez.properties" = { - "bluez5.enable-sbc-xq" = true; - "bluez5.enable-msbc" = true; - "bluez5.enable-hw-volume" = true; - # Default roles: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/bluetooth.html#monitor-properties - "bluez5.roles" = [ "a2dp_sink" "a2dp_source" "bap_sink" "bap_source" "hfp_hf" "hfp_ag" ]; - }; - }; - }; - }; - - ### - ## Misc - ### - # Necessary for home-manager niri setup - security.polkit.enable = true; - - hardware.bluetooth = { - enable = true; - powerOnBoot = true; # powers up the default Bluetooth controller on boot - settings = { - General = { - Name = "Nate-Vasion"; - ControllerMode = "dual"; - FastConnectable = "true"; - Experimental = "true"; - }; - Policy = { AutoEnable = "true"; }; - LE = { EnableAdvMonInterleaveScan = 1; }; - }; - }; - - # - # Hardware scanning support - # - hardware.sane = { - enable = true; - brscan5.enable = true; - }; - - # - # Nvidia Setup - # - - services.udev.extraRules = '' - # For betaflight configurator - # DFU (Internal bootloader for STM32 and AT32 MCUs) - SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - # For ddcutil monitor controls - KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" - ''; - - services.xserver.videoDrivers = [ "nvidia" ]; - hardware = { - graphics = { - enable = true; - enable32Bit = true; - extraPackages = with pkgs; [ - intel-vaapi-driver - intel-media-driver - vpl-gpu-rt - ]; - }; - nvidia = { - # Modesetting is required. - modesetting.enable = true; - # Nvidia power management. Experimental, and can cause sleep/suspend to fail. - # Enable this if you have graphical corruption issues or application crashes after waking - # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead - # of just the bare essentials. - powerManagement.enable = false; - - # Fine-grained power management. Turns off GPU when not in use. - # Experimental and only works on modern Nvidia GPUs (Turing or newer). - powerManagement.finegrained = true; - - # Use the NVidia open source kernel module (not to be confused with the - # independent third-party "nouveau" open source driver). - # Support is limited to the Turing and later architectures. Full list of - # supported GPUs is at: - # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus - # Only available from driver 515.43.04+ - # Currently alpha-quality/buggy, so false is currently the recommended setting. - open = true; - - # Enable the Nvidia settings menu, - # accessible via `nvidia-settings`. - nvidiaSettings = true; - - # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = config.boot.kernelPackages.nvidiaPackages.stable; - prime = { - # sync.enable = true; - offload.enable = true; - offload.enableOffloadCmd = true; # adds `nvidia-offload` command to env - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; - }; - }; - }; - # Create special on the go boot entry for battery saving - # This disables NVIDIA GPU completely and uses Intel integrated graphics only - specialisation = { - on-the-go.configuration = { - system.nixos.tags = [ "on-the-go" ]; - - # Blacklist all NVIDIA kernel modules - boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" "nvidia_uvm" ]; - - # Force Intel i915 driver for 13th gen (Raptor Lake) integrated graphics - # Device IDs: a7a0 or a7a8 for i7-13700H - boot.kernelParams = [ - "i915.force_probe=a7a0" - "module_blacklist=nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm" - ]; - - boot.extraModprobeConfig = '' - blacklist nouveau - blacklist nvidia - blacklist nvidia_drm - blacklist nvidia_modeset - blacklist nvidia_uvm - options nouveau modeset=0 - ''; - - # Remove NVIDIA devices from PCI bus to save power - services.udev.extraRules = '' - # Remove NVIDIA USB xHCI Host Controller devices, if present - ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" - # Remove NVIDIA USB Type-C UCSI devices, if present - ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1" - # Remove NVIDIA Audio devices, if present - ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1" - # Remove NVIDIA VGA/3D controller devices - ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1" - ''; - - # Use Intel modesetting driver only - services.xserver.videoDrivers = lib.mkForce [ "modesetting" ]; - - # Disable all NVIDIA hardware configurations - hardware.nvidia = { - prime.offload.enable = lib.mkForce false; - prime.offload.enableOffloadCmd = lib.mkForce false; - powerManagement.finegrained = lib.mkForce false; - prime.sync.enable = lib.mkForce false; - }; - - # Ensure Intel graphics packages are available - hardware.graphics.extraPackages = lib.mkForce (with pkgs; [ - intel-vaapi-driver - intel-media-driver - vpl-gpu-rt - ]); - - # Clear NVIDIA-specific environment variables - environment.sessionVariables = { - GBM_BACKEND = lib.mkForce ""; - __GLX_VENDOR_LIBRARY_NAME = lib.mkForce ""; - }; - }; - }; - }; -} diff --git a/nate-work/modules/niri/niri_home.nix b/nate-work/modules/niri/niri_home.nix deleted file mode 100644 index 247c6c4..0000000 --- a/nate-work/modules/niri/niri_home.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ inputs, lib, config, pkgs, ... }: -{ - imports = [ - ../../../shared/modules/home-manager/waybar.nix - ]; - - options.nirihome = { - enable = lib.mkEnableOption "Enable niri home config"; - homePackages = lib.mkOption { - default = []; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - }; - - config = lib.mkIf config.nirihome.enable { - # Note: We don't use wayland.windowManager.niri in home-manager - # because we manage the niri config through dotfiles. - # The system-level module enables niri via programs.niri.enable - - # Niri sets WAYLAND_DISPLAY and XDG_CURRENT_DESKTOP automatically. - # Manually overriding session vars conflicts with xdg-desktop-portal-gnome - # screencasting (breaks Zoom screen sharing). - - # Cursor is managed by Stylix (stylix.cursor in nate-work/default.nix) - - # Waybar with Stylix theming - waybarConfig.enable = true; - - home.packages = with pkgs; lib.lists.flatten [ - [ - ### niri packages - swaybg - swaylock-effects - # Etc - gopsuinfo # For system stats in panel - wl-clipboard # System clipboard - brightnessctl - wev - wdisplays - # Notifs - libnotify - swaynotificationcenter - # Tray Applets - # networkmanagerapplet # Noctalia handles wifi - pavucontrol - syncthingtray - tailscale-systray - # Portals are managed at system level by programs.niri.enable - ] - config.nirihome.homePackages - ]; - programs.cava = { - enable = true; - settings = { - smoothing.noise_reduction = 55; - }; - }; - }; -} diff --git a/nate/default.nix b/nate/default.nix deleted file mode 100644 index a6fb1f3..0000000 --- a/nate/default.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }: - let - userName = "nate"; - fullName = "Nate Anderson"; - email = "n8r@tuta.io"; - hostName = "winmax"; - desktop = "niri"; - gaming = true; - in -{ - imports = [ - ./desktop-configuration.nix - ./nixos/hardware-configuration.nix - ]; - - deskCfg = { - userName = userName; - hostName = hostName; - fullName = fullName; - de = desktop; - installGaming = gaming; - flakePath = "/home/${userName}/nixos"; - }; - - # Limit the number of generations to keep - boot.loader.systemd-boot.configurationLimit = 5; - - # Systemd initrd for faster boot - boot.initrd.systemd.enable = true; - - # Plymouth boot animation - boot.plymouth = { - enable = true; - theme = "rings"; - themePackages = with pkgs; [ - (adi1090x-plymouth-themes.override { - selected_themes = [ "rings" ]; - }) - ]; - }; - - # Silent boot - boot.consoleLogLevel = 0; - boot.initrd.verbose = false; - boot.kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" - "loglevel=3" - "rd.systemd.show_status=false" - "rd.udev.log_level=3" - "udev.log_priority=3" - ]; - boot.loader.timeout = 0; - - # Perform garbage collection weekly to maintain low disk usage - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 14d"; - }; - - # Optimize storage - nix.settings.auto-optimise-store = true; -} diff --git a/nate/desktop-configuration.nix b/nate/desktop-configuration.nix deleted file mode 100644 index 0993807..0000000 --- a/nate/desktop-configuration.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }: -let - supportedDesktops = [ "sway" "niri" ]; - supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; - deskCfg = config.deskCfg; -in -{ - options.deskCfg = { - de = lib.mkOption { - default = "niri"; - type = lib.types.str; - description = "Desktop Environment"; - }; - userName = lib.mkOption { - type = lib.types.str; - description = "Main username for system"; - }; - hostName = lib.mkOption { - type = lib.types.str; - description = "Hostname for system"; - }; - fullName = lib.mkOption { - type = lib.types.str; - default = "User"; - description = "Full display name for the user"; - }; - installGaming = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to install gaming software or not"; - }; - flakePath = lib.mkOption { - type = lib.types.str; - description = "Absolute path to the NixOS flake configuration directory"; - }; - }; - - imports = [ - ../shared/modules/user/main_user.nix - modules/sway/sway_conf.nix - modules/niri/niri_conf.nix - ../shared/modules/services/motu-m4-combined.nix - ../shared/modules/system/power_manager.nix - ../shared/modules/system/noctalia-system.nix - ]; - - config = { - assertions = [ - { - assertion = builtins.elem deskCfg.de supportedDesktops; - message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}"; - } - ]; - - # Stylix theming - auto-generate color scheme from wallpaper - stylix = { - enable = true; - image = ./wallpaper.png; - polarity = "dark"; - - # System-wide cursor - cursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 32; - }; - - # Fonts - fonts = { - serif = { - package = pkgs.lato; - name = "Lato"; - }; - sansSerif = { - package = pkgs.lato; - name = "Lato"; - }; - monospace = { - package = pkgs.maple-mono.NF; - name = "Maple Mono NF"; - }; - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - sizes = { - applications = 12; - desktop = 10; - popups = 10; - terminal = 11; - }; - }; - - # Icon theme for tray applets (nm-applet, etc.) - iconTheme = { - enable = true; - package = pkgs.papirus-icon-theme; - light = "Papirus-Light"; - dark = "Papirus-Dark"; - }; - - # Let plymouth use its own theme - targets.plymouth.enable = false; - }; - - nixpkgs.overlays = [ - inputs.nur.overlays.default - ]; - - # Enable flakes feature - nix.settings.experimental-features = [ - "nix-command" "flakes" - ]; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = deskCfg.hostName; # Define your hostname. - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - time.timeZone = timeZone; - - main_user = { - enable = true; - userName = deskCfg.userName; - fullName = deskCfg.fullName; - isDesktopUser = true; - extraGroups = [ "dialout" "docker" "scanner" "lp" ]; - }; - - swaywm = { - enable = deskCfg.de == "sway"; - useNonFree = true; - installGaming = deskCfg.installGaming; - systemPackages = []; - }; - - niriwm = { - enable = deskCfg.de == "niri"; - useNonFree = true; - installGaming = deskCfg.installGaming; - user = deskCfg.userName; - systemPackages = []; - }; - - services.motu-m4-combined = { - enable = true; - user = deskCfg.userName; - latencyMs = 10; - }; - - power_manager = { - enable = true; - backend = "power-profiles-daemon"; # Required for Noctalia power profile widget - }; - - # Enable Noctalia shell system services - noctaliaSystem.enable = true; - - system.stateVersion = "23.11"; # Did you read the comment? - }; -} - diff --git a/nate/modules/home-manager/home.nix b/nate/modules/home-manager/home.nix deleted file mode 100644 index 3fa0c35..0000000 --- a/nate/modules/home-manager/home.nix +++ /dev/null @@ -1,274 +0,0 @@ -{ inputs, config, pkgs, lib, osConfig, ... }: - let - userName = "nate"; - fullName = "Nathan Anderson"; - email = "n8r@tuta.io"; - unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; }; - in -{ - imports = [ - ../../../shared/modules/home-manager/programs.nix - ../../../shared/modules/home-manager/git-autosync.nix - ../../../shared/modules/home-manager/noctalia.nix - ../niri/niri_home.nix - ]; - - home.username = userName; - home.homeDirectory = "/home/${userName}"; - - programs.home-manager.enable = true; - home.stateVersion = "23.11"; # Please read the comment before changing. - - # Stylix auto-theming - applies to all programs..enable apps - stylix.autoEnable = true; - - # Enable shared modules - sharedPrograms.enable = true; - fonts.fontconfig.enable = true; - - # Git autosync for star-command - services.git-autosync = { - enable = true; - repos.star-command = { - path = "/home/${userName}/source/star-command"; - gitName = fullName; - gitEmail = email; - }; - }; - - nirihome = { - enable = true; - homePackages = []; - }; - - # Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset) - noctaliaShell = { - enable = true; - settings = { - bar.position = "top"; - colorSchemes = { - darkMode = true; - useWallpaperColors = true; - }; - location.name = "Denver"; - general.avatarImage = "/home/${userName}/.face"; - }; - }; - - # Additional user packages - # Note: Programs with Stylix theming are in shared modules - home.packages = with pkgs; [ - # - # Dev Tools - # - docker - unstable.godot - jq - python3 - unstable.claude-code - usbutils - openscad - ### LSP's - nil # Nix LSP - nodePackages_latest.bash-language-server - vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp - python313Packages.python-lsp-server - - # - # Gaming - # - mumble - mangohud - wine-wayland - - # - # Unix tools - # - duf - dust - fd - lsd - ripgrep - gtop - htop - unzip - - # - # Photo / Video - # - unstable.davinci-resolve-studio - obs-studio - imv - ffmpeg - - # - # Other - # - kdePackages.filelight - simple-scan - - # - # Style (Qt plugin for Stylix) - # - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - # Additional fonts (main fonts managed by Stylix) - unstable.nerd-fonts.hurmit - unstable.nerd-fonts.overpass - recursive - ]; - - home.file = lib.mkMerge [ - # Shared dotfiles - (let - sharedDotfilesPath = ../../../shared/dotfiles; - in - if builtins.pathExists sharedDotfilesPath then - builtins.listToAttrs (map (name: { - name = "${config.xdg.configHome}/${name}"; - value = { source = lib.mkDefault (sharedDotfilesPath + "/${name}"); }; - }) (builtins.attrNames (builtins.readDir sharedDotfilesPath))) - else {}) - # Add local dotfiles, overriding from local over shared - (let - localDotfilesPath = ../../dotfiles; - in - if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != {} then - builtins.listToAttrs (map (name: { - name = "${config.xdg.configHome}/${name}"; - value = { source = localDotfilesPath + "/${name}"; }; - }) (builtins.attrNames (builtins.readDir localDotfilesPath))) - else {}) - ]; - - xdg.configFile = { - # Active linked dotfiles - "niri".source = config.lib.file.mkOutOfStoreSymlink "${osConfig.deskCfg.flakePath}/nate/linked-dotfiles/niri"; - }; - - # Configure default applications for opening links - xdg.mimeApps = { - enable = true; - defaultApplications = { - "text/html" = "firefox.desktop"; - "x-scheme-handler/http" = "firefox.desktop"; - "x-scheme-handler/https" = "firefox.desktop"; - "x-scheme-handler/about" = "firefox.desktop"; - "x-scheme-handler/unknown" = "firefox.desktop"; - }; - }; - - services.kdeconnect = { - enable = true; - indicator = true; - }; - - # enable saving ssh secrets (needed for go mod installing private packages) - services.gnome-keyring.enable = true; - services.gnome-keyring.components = [ "ssh" "secrets" ]; - # Enable bluetooth headphone controls - services.mpris-proxy.enable = true; - - # Noctalia replaces SwayOSD and SwayNC - disabled via noctalia module - # services.swayosd = { - # enable = true; - # topMargin = 0.9; - # }; - # services.swaync = { - # enable = true; - # settings = { - # positionX = "center"; - # positionY = "top"; - # notification-window-width = 800; - # }; - # }; - - home.sessionVariables = { - EDITOR = "hx"; - # For electron apps - NIXOS_OZONE_WL = "1"; - }; - - # Git setup - programs.git = { - enable = true; - settings = { - user.name = fullName; - user.email = email; - init = { defaultBranch = "main"; }; - merge = { conflictStyle="zdiff3"; }; - pull = { ff = "only"; }; - push = { autoSetupRemote="true"; }; - url = { - "git@github.com:" = { - insteadOf = "https://github.com/"; - }; - }; - }; - }; - # Better git diffs with delta - programs.delta = { - enable = true; - enableGitIntegration = true; - options = { - side-by-side = true; - hyperlinks = true; - }; - }; - # direnv for auto nix flake shells - programs = { - direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; - - bash.enable = true; - }; - - # Zsh setup - programs.zsh = { - enable = true; - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - theme = "half-life"; - extraConfig = - '' - zstyle :omz:plugins:ssh-agent lazy yes - ''; - }; - initContent = '' - # integrate ssh-agent from gnome keyring - export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh - - eval "$(direnv hook zsh)" - - yt-audio() { - nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3" - } - ''; - shellAliases = { - ls="lsd"; - l="lsd --almost-all --long"; - llm="lsd --timesort --long"; - lS="lsd --oneline --classic"; - lt="lsd --tree --depth=2"; - cat="bat --paging=never"; - rm="rm -i"; - }; - syntaxHighlighting = { - enable = true; - }; - }; - - # Stylix handles Qt and GTK theming - - # Noctalia has built-in night light, so wlsunset is disabled via noctalia module - # services.wlsunset = { - # enable = true; - # sunrise = "07:00"; - # sunset = "17:00"; - # temperature.night = 3500; - # }; -} diff --git a/nate/modules/niri/niri_conf.nix b/nate/modules/niri/niri_conf.nix deleted file mode 100644 index 3b1b069..0000000 --- a/nate/modules/niri/niri_conf.nix +++ /dev/null @@ -1,281 +0,0 @@ -{ - inputs, - lib, - config, - pkgs, - userName, - ... -}: -let - unstable = import inputs.nixpkgs-unstable { - system = "x86_64-linux"; - config.allowUnfree = true; - }; -in -{ - options.niriwm = { - enable = lib.mkEnableOption "Enable niri window manager."; - useNonFree = lib.mkOption { - default = false; - example = true; - description = "Whether to enable non-free software in the niri config"; - }; - installGaming = lib.mkOption { - default = false; - example = true; - description = "Whether to install gaming software on the system."; - }; - systemPackages = lib.mkOption { - default = [ ]; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - user = lib.mkOption { - type = lib.types.str; - }; - }; - - ### - ## Configuration - ### - config = lib.mkIf config.niriwm.enable { - - nixpkgs.config.allowUnfree = config.niriwm.useNonFree; - - # Portal config: programs.niri.enable adds xdg-desktop-portal-gnome - # and niri-portals.conf via configPackages, but the portal daemon - # doesn't reliably pick up configPackages files. Setting config - # explicitly ensures ScreenCast routes to the GNOME portal. - xdg.portal.config.niri = { - default = [ "gnome" "gtk" ]; - "org.freedesktop.impl.portal.Access" = [ "gtk" ]; - "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; - "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; - }; - xdg.sounds.enable = true; - - ### - ## System Packages - ### - environment.systemPackages = - with pkgs; - lib.lists.flatten [ - [ - bash - egl-wayland - git - glib # gsettings - grim - kanshi - libnotify - lxqt.lxqt-policykit - man-pages - man-pages-posix - nautilus - # networkmanagerapplet # Noctalia handles wifi - pavucontrol - slurp - swaylock - swayosd - syncthingtray - unstable.ghostty - unstable.xwayland-satellite - wdisplays - wl-clipboard - xdg-utils - zsh - ] - config.niriwm.systemPackages - ]; - environment.variables.QT_STYLE_OVERRIDE = "kvantum"; - environment.sessionVariables = { - # use wayland - MOZ_ENABLE_WAYLAND = "1"; - FIREFOX_USE_SYSTEM_THEME = "true"; - # QT_QPA_PLATFORM and GDK_BACKEND must NOT be set - they break the screencast portal - WLR_NO_HARDWARE_CURSORS = "1"; - ELECTRON_OZONE_PLATFORM_HINT = "auto"; - NIXOS_OZONE_WL = "1"; - GTK_THEME = "stylix"; - }; - - # adds additional man pages - documentation.dev.enable = true; - - programs.steam = lib.mkIf config.niriwm.installGaming { - enable = true; - remotePlay.openFirewall = true; - gamescopeSession.enable = true; - }; - programs.gamemode = { - enable = true; - settings = { - general = { - reaper_freq = 5; - desiredgov = "performance"; - softrealtime = "auto"; - }; - }; - }; - programs.kdeconnect.enable = true; - programs.niri.enable = true; - programs.regreet.enable = true; - programs.xfconf.enable = true; - programs.zsh.enable = true; - programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead - programs.adb.enable = true; - - # For nautilus - services.gnome.sushi.enable = true; - programs.nautilus-open-any-terminal = { - enable = true; - terminal = "ghostty"; - }; - - services.syncthing = { - enable = true; - dataDir = "/home/${config.niriwm.user}/.syncthing"; - openDefaultPorts = true; - user = config.niriwm.user; - }; - systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder - - # Set zsh as the default shell system-wide - users.defaultUserShell = pkgs.zsh; - environment.shells = with pkgs; [ - zsh - bash - ]; - - ### - ## Services - ### - # services.blueman.enable = true; # Noctalia handles bluetooth - services.gvfs.enable = true; # file manager mount, trash, etc - services.tumbler.enable = true; # thunar thumbnails - services.openssh.enable = true; - services.dbus.enable = true; - services.gnome.gnome-keyring.enable = true; - services.flatpak.enable = true; - services.usbmuxd.enable = true; - services.tailscale = { - enable = true; - openFirewall = true; - }; - - # For yubioath desktop - services.pcscd.enable = true; - - # Printing - services.printing = { - enable = true; - browsing = true; - drivers = [ pkgs.brlaser ]; - }; - - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - - networking.firewall = { - enable = true; - allowedTCPPorts = [ 8080 8081 ]; - }; - - # Audio - Modern PipeWire setup - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - audio.enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - wireplumber.extraConfig = { - "wireplumber.settings" = { - bluetooth.autoswitch-to-headset-profile = false; - }; - bluetoothEnhancements = { - "monitor.bluez.properties" = { - "bluez5.enable-sbc-xq" = true; - "bluez5.enable-msbc" = true; - "bluez5.enable-hw-volume" = true; - "bluez5.roles" = [ - "a2dp_sink" - "a2dp_source" - "bap_sink" - "bap_source" - "hfp_hf" - "hfp_ag" - ]; - }; - }; - }; - }; - - ### - ## Misc - ### - # Necessary for home-manager niri setup - security.polkit.enable = true; - - # Keyring setup - security.pam.services.greetd.enableGnomeKeyring = true; - security.pam.services.login.enableGnomeKeyring = true; - - hardware.bluetooth = { - enable = true; - powerOnBoot = true; - settings = { - General = { - Name = "Nate-WinMax"; - ControllerMode = "dual"; - FastConnectable = "true"; - Experimental = "true"; - Privacy = "device"; - JustWorksRepairing = "always"; - Class = "0x000100"; - }; - Policy = { - AutoEnable = "true"; - }; - LE = { - EnableAdvMonInterleaveScan = 1; - }; - }; - }; - hardware.xpadneo.enable = true; - - # Hardware scanning support - hardware.sane = { - enable = true; - brscan5.enable = true; - }; - - virtualisation.docker.enable = true; - - # udev rules - services.udev.extraRules = '' - # For betaflight configurator - # DFU (Internal bootloader for STM32 and AT32 MCUs) - SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" - ''; - - # AMD GPU setup (WinMax uses AMD) - services.xserver.videoDrivers = [ "amdgpu" ]; - # Enable HIP for ROCm - systemd.tmpfiles.rules = [ - "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" - ]; - hardware.graphics = { - enable = true; - enable32Bit = true; - extraPackages = with pkgs; [ - rocmPackages.clr.icd - ]; - }; - }; -} diff --git a/nate/modules/niri/niri_home.nix b/nate/modules/niri/niri_home.nix deleted file mode 100644 index eb8f165..0000000 --- a/nate/modules/niri/niri_home.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ inputs, lib, config, pkgs, ... }: -{ - imports = [ - ../../../shared/modules/home-manager/waybar.nix - ]; - - options.nirihome = { - enable = lib.mkEnableOption "Enable niri home config"; - homePackages = lib.mkOption { - default = []; - description = "Add any additional packages desired. Merged with niri defaults."; - }; - }; - - config = lib.mkIf config.nirihome.enable { - # Note: We don't use wayland.windowManager.niri in home-manager - # because we manage the niri config through dotfiles. - # The system-level module enables niri via programs.niri.enable - - # Niri sets WAYLAND_DISPLAY and XDG_CURRENT_DESKTOP automatically. - # Manually overriding session vars conflicts with xdg-desktop-portal-gnome - # screencasting (breaks Zoom screen sharing). - - # Cursor is managed by Stylix (stylix.cursor in nate/default.nix) - - # Waybar with Stylix theming - waybarConfig.enable = true; - - home.packages = with pkgs; lib.lists.flatten [ - [ - ### niri packages - swaybg - swaylock-effects - # Etc - gopsuinfo # For system stats in panel - wl-clipboard # System clipboard - brightnessctl - wev - wdisplays - # Notifs - libnotify - swaynotificationcenter - # Tray Applets - # networkmanagerapplet # Noctalia handles wifi - pavucontrol - syncthingtray - tailscale-systray - # Portals are managed at system level by programs.niri.enable - ] - config.nirihome.homePackages - ]; - programs.cava = { - enable = true; - settings = { - smoothing.noise_reduction = 55; - }; - }; - }; -} diff --git a/shared/modules/desktop/base.nix b/shared/modules/desktop/base.nix new file mode 100644 index 0000000..0175d46 --- /dev/null +++ b/shared/modules/desktop/base.nix @@ -0,0 +1,84 @@ +{ + config, + lib, + inputs, + pkgs, + timeZone, + ... +}: +let + cfg = config.deskCfg; +in +{ + options.deskCfg = { + de = lib.mkOption { + default = "niri"; + type = lib.types.str; + description = "Desktop Environment"; + }; + userName = lib.mkOption { + type = lib.types.str; + description = "Main username for system"; + }; + hostName = lib.mkOption { + type = lib.types.str; + description = "Hostname for system"; + }; + fullName = lib.mkOption { + type = lib.types.str; + default = "User"; + description = "Full display name for the user"; + }; + installGaming = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Whether to install gaming software or not"; + }; + flakePath = lib.mkOption { + type = lib.types.str; + default = "/home/${cfg.userName}/nixos"; + description = "Absolute path to the NixOS flake configuration directory"; + }; + }; + + imports = [ + ../user/main_user.nix + ../system/power_manager.nix + ../system/noctalia-system.nix + ]; + + config = { + nixpkgs.overlays = [ + inputs.nur.overlays.default + ]; + + # Enable flakes + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + # Boot loader defaults + boot.loader.systemd-boot.enable = lib.mkDefault true; + boot.loader.efi.canTouchEfiVariables = lib.mkDefault true; + + networking.hostName = cfg.hostName; + networking.networkmanager.enable = lib.mkDefault true; + + time.timeZone = timeZone; + + main_user = { + enable = true; + userName = cfg.userName; + fullName = cfg.fullName; + isDesktopUser = true; + }; + + power_manager = { + enable = lib.mkDefault true; + backend = lib.mkDefault "power-profiles-daemon"; + }; + + noctaliaSystem.enable = lib.mkDefault true; + }; +} diff --git a/shared/modules/desktop/greetd.nix b/shared/modules/desktop/greetd.nix new file mode 100644 index 0000000..0074e75 --- /dev/null +++ b/shared/modules/desktop/greetd.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.deskCfg; +in +{ + config = lib.mkIf (cfg.de == "niri") { + services.greetd = { + enable = lib.mkDefault true; + settings = { + initial_session = { + command = lib.mkDefault "${pkgs.niri}/bin/niri-session"; + user = lib.mkDefault cfg.userName; + }; + }; + }; + }; +} diff --git a/shared/modules/desktop/silent-boot.nix b/shared/modules/desktop/silent-boot.nix new file mode 100644 index 0000000..d1f231e --- /dev/null +++ b/shared/modules/desktop/silent-boot.nix @@ -0,0 +1,28 @@ +{ + config, + lib, + ... +}: +let + cfg = config.silentBoot; +in +{ + options.silentBoot = { + enable = lib.mkEnableOption "silent boot (quiet kernel, hidden boot menu)"; + }; + + config = lib.mkIf cfg.enable { + boot.consoleLogLevel = 0; + boot.initrd.verbose = false; + boot.kernelParams = [ + "quiet" + "splash" + "boot.shell_on_fail" + "loglevel=3" + "rd.systemd.show_status=false" + "rd.udev.log_level=3" + "udev.log_priority=3" + ]; + boot.loader.timeout = lib.mkDefault 1; + }; +} diff --git a/shared/modules/desktop/stylix.nix b/shared/modules/desktop/stylix.nix new file mode 100644 index 0000000..9abfcab --- /dev/null +++ b/shared/modules/desktop/stylix.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + ... +}: +{ + config.stylix = { + enable = lib.mkDefault true; + polarity = lib.mkDefault "dark"; + + cursor = { + package = lib.mkDefault pkgs.bibata-cursors; + name = lib.mkDefault "Bibata-Modern-Classic"; + size = lib.mkDefault 32; + }; + + fonts = { + serif = { + package = lib.mkDefault pkgs.lato; + name = lib.mkDefault "Lato"; + }; + sansSerif = { + package = lib.mkDefault pkgs.lato; + name = lib.mkDefault "Lato"; + }; + monospace = { + package = lib.mkDefault pkgs.maple-mono.NF; + name = lib.mkDefault "Maple Mono NF"; + }; + emoji = { + package = lib.mkDefault pkgs.noto-fonts-color-emoji; + name = lib.mkDefault "Noto Color Emoji"; + }; + sizes = { + applications = lib.mkDefault 14; + desktop = lib.mkDefault 12; + popups = lib.mkDefault 12; + terminal = lib.mkDefault 14; + }; + }; + + iconTheme = { + enable = lib.mkDefault true; + package = lib.mkDefault pkgs.papirus-icon-theme; + light = lib.mkDefault "Papirus-Light"; + dark = lib.mkDefault "Papirus-Dark"; + }; + + targets = { + plymouth.enable = lib.mkDefault false; + }; + }; +} diff --git a/shared/modules/home-manager/base-home.nix b/shared/modules/home-manager/base-home.nix new file mode 100644 index 0000000..794e6db --- /dev/null +++ b/shared/modules/home-manager/base-home.nix @@ -0,0 +1,164 @@ +# Shared Home Manager base config for all desktop users. +# Provides common programs, services, session variables, shell setup, +# fonts, and dotfile management. Host home.nix files import this and +# override/extend as needed. +{ config, lib, pkgs, osConfig, ... }: +let + cfg = config.baseHome; +in +{ + options.baseHome = { + enable = lib.mkEnableOption "shared home-manager base config"; + userName = lib.mkOption { + type = lib.types.str; + description = "Username for home directory and services"; + }; + fullName = lib.mkOption { + type = lib.types.str; + description = "Full display name for git etc"; + }; + email = lib.mkOption { + type = lib.types.str; + description = "Email for git etc"; + }; + stateVersion = lib.mkOption { + type = lib.types.str; + default = "23.11"; + description = "Home Manager state version"; + }; + hostDir = lib.mkOption { + type = lib.types.str; + description = "Host directory name for dotfile symlinks (e.g. 'frame12')"; + }; + }; + + imports = [ + ./programs.nix + ./git-autosync.nix + ./noctalia.nix + ../wm/niri-home.nix + ]; + + config = lib.mkIf cfg.enable { + home.username = cfg.userName; + home.homeDirectory = "/home/${cfg.userName}"; + programs.home-manager.enable = true; + home.stateVersion = cfg.stateVersion; + + sharedPrograms.enable = true; + fonts.fontconfig.enable = true; + + # Stylix auto-theming + stylix = { + autoEnable = lib.mkDefault true; + targets.firefox = { + profileNames = lib.mkDefault [ "default" ]; + colorTheme.enable = lib.mkDefault true; + firefoxGnomeTheme.enable = lib.mkDefault true; + }; + }; + + # Enable niri home config + nirihome.enable = lib.mkDefault true; + + # Common session variables + home.sessionVariables = { + EDITOR = lib.mkDefault "hx"; + NIXOS_OZONE_WL = "1"; + }; + + # Gnome keyring for SSH and secrets + services.gnome-keyring.enable = true; + services.gnome-keyring.components = [ "ssh" "secrets" ]; + + # Bluetooth headphone controls + services.mpris-proxy.enable = true; + + # Common packages (Qt theming, fonts, unix tools) + home.packages = with pkgs; [ + # Qt theming for Stylix + libsForQt5.qtstyleplugin-kvantum + libsForQt5.qt5ct + # Common unix tools + lsd + htop + unzip + ]; + + # Git base config — hosts extend with user-specific settings + programs.git = { + enable = true; + settings = { + user.name = cfg.fullName; + user.email = cfg.email; + init.defaultBranch = "main"; + pull.ff = "only"; + merge.conflictStyle = "zdiff3"; + push.autoSetupRemote = "true"; + }; + }; + + programs.bash.enable = true; + + # Zsh base setup + programs.zsh = { + enable = true; + oh-my-zsh = { + enable = true; + plugins = [ "git" ]; + theme = lib.mkDefault "half-life"; + }; + initContent = lib.mkDefault '' + # History + HISTSIZE=10000 + SAVEHIST=10000 + setopt SHARE_HISTORY + setopt APPEND_HISTORY + + # integrate ssh-agent from gnome keyring + export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh + ''; + shellAliases = { + ls = "lsd"; + l = "lsd --almost-all --long"; + llm = "lsd --timesort --long"; + lS = "lsd --oneline --classic"; + lt = "lsd --tree --depth=2"; + cat = "bat --paging=never"; + rm = "rm -i"; + }; + syntaxHighlighting.enable = true; + }; + + # Shared dotfiles — all hosts use the same pattern + home.file = lib.mkMerge [ + ( + let + # Relative to the host's home.nix (hosts//modules/home-manager/) + # After migration, shared dotfiles at ../../../../shared/dotfiles + # But since this module lives in shared/, use a relative path from here + sharedDotfilesPath = ../../dotfiles; + in + if builtins.pathExists sharedDotfilesPath then + builtins.listToAttrs ( + map (name: { + name = "${config.xdg.configHome}/${name}"; + value = { + source = lib.mkDefault (sharedDotfilesPath + "/${name}"); + }; + }) (builtins.attrNames (builtins.readDir sharedDotfilesPath)) + ) + else + { } + ) + ]; + + # Niri config symlink — each host has its own niri dotfiles + xdg.configFile = { + "niri".source = lib.mkDefault ( + config.lib.file.mkOutOfStoreSymlink + "${osConfig.deskCfg.flakePath}/hosts/${cfg.hostDir}/linked-dotfiles/niri" + ); + }; + }; +} diff --git a/shared/modules/services/avahi.nix b/shared/modules/services/avahi.nix new file mode 100644 index 0000000..2c30812 --- /dev/null +++ b/shared/modules/services/avahi.nix @@ -0,0 +1,10 @@ +{ config, lib, ... }: +{ + config = lib.mkIf config.niriwm.enable { + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + }; +} diff --git a/frame12/modules/colemak-ec.nix b/shared/modules/services/colemak-ec.nix similarity index 100% rename from frame12/modules/colemak-ec.nix rename to shared/modules/services/colemak-ec.nix diff --git a/shared/modules/services/docker.nix b/shared/modules/services/docker.nix new file mode 100644 index 0000000..6fe9aea --- /dev/null +++ b/shared/modules/services/docker.nix @@ -0,0 +1,42 @@ +{ config, lib, inputs, ... }: +let + cfg = config.niriwm; +in +{ + options.dockerConfig = { + rootless = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Enable rootless Docker mode"; + }; + enableOnBoot = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Start Docker on boot"; + }; + useUnstable = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Use docker package from nixpkgs-unstable"; + }; + }; + + config = lib.mkIf cfg.enable { + virtualisation.docker = { + enable = true; + enableOnBoot = config.dockerConfig.enableOnBoot; + rootless = lib.mkIf config.dockerConfig.rootless { + enable = true; + setSocketVariable = true; + }; + daemon.settings = lib.mkIf config.dockerConfig.rootless { + userland-proxy = false; + }; + } // lib.optionalAttrs config.dockerConfig.useUnstable { + package = (import inputs.nixpkgs-unstable { + system = "x86_64-linux"; + config.allowUnfree = true; + }).docker_25; + }; + }; +} diff --git a/shared/modules/services/hyprvoice.nix b/shared/modules/services/hyprvoice.nix new file mode 100644 index 0000000..ecca9e4 --- /dev/null +++ b/shared/modules/services/hyprvoice.nix @@ -0,0 +1,86 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.services.hyprvoice; + + hyprvoice = pkgs.buildGoModule rec { + pname = "hyprvoice"; + version = "1.0.2"; + + src = pkgs.fetchFromGitHub { + owner = "LeonardoTrapani"; + repo = "hyprvoice"; + rev = "v${version}"; + hash = "sha256-ng17y53L9cyxSjupSGKyZkBXOGneJrjprjvODYch6EE="; + }; + + vendorHash = "sha256-b1IsFlhj+xTQT/4PzL97YjVjjS7TQtcIsbeK3dLOxR4="; + + subPackages = [ "cmd/hyprvoice" ]; + + # Runtime deps need to be available for whisper-cpp transcription, + # audio capture, text injection, and notifications. + nativeBuildInputs = [ pkgs.makeWrapper ]; + + postInstall = '' + wrapProgram $out/bin/hyprvoice \ + --prefix PATH : ${lib.makeBinPath runtimeDeps} + ''; + + meta = { + description = "Voice-powered typing for Wayland desktops"; + homepage = "https://github.com/LeonardoTrapani/hyprvoice"; + license = lib.licenses.mit; + mainProgram = "hyprvoice"; + }; + }; + + runtimeDeps = with pkgs; [ + whisper-cpp + pipewire + wl-clipboard + wtype + libnotify + ] ++ lib.optionals cfg.ydotool [ pkgs.ydotool ]; + +in +{ + options.services.hyprvoice = { + enable = lib.mkEnableOption "hyprvoice voice-to-text dictation"; + + model = lib.mkOption { + type = lib.types.str; + default = "small.en"; + description = "Whisper model to use (e.g., tiny.en, base.en, small.en, medium.en, large-v3-turbo)"; + }; + + ydotool = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Include ydotool as an alternative text injection backend (recommended for Chromium apps)"; + }; + + user = lib.mkOption { + type = lib.types.str; + description = "User to run the hyprvoice service as"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ hyprvoice ]; + + systemd.user.services.hyprvoice = { + description = "Hyprvoice voice-to-text daemon"; + after = [ "pipewire.service" "graphical-session.target" ]; + wants = [ "pipewire.service" ]; + wantedBy = [ "graphical-session.target" ]; + + serviceConfig = { + Type = "simple"; + ExecStart = "${hyprvoice}/bin/hyprvoice serve"; + Restart = "on-failure"; + RestartSec = 5; + }; + }; + }; +} diff --git a/shared/modules/services/kdeconnect.nix b/shared/modules/services/kdeconnect.nix new file mode 100644 index 0000000..61b0ede --- /dev/null +++ b/shared/modules/services/kdeconnect.nix @@ -0,0 +1,6 @@ +{ config, lib, ... }: +{ + config = lib.mkIf config.niriwm.enable { + programs.kdeconnect.enable = true; + }; +} diff --git a/shared/modules/services/syncthing.nix b/shared/modules/services/syncthing.nix new file mode 100644 index 0000000..c3db91f --- /dev/null +++ b/shared/modules/services/syncthing.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: +let + cfg = config.niriwm; +in +{ + config = lib.mkIf cfg.enable { + services.syncthing = { + enable = true; + dataDir = "/home/${cfg.user}/.syncthing"; + openDefaultPorts = true; + user = cfg.user; + }; + systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; + }; +} diff --git a/shared/modules/services/tailscale.nix b/shared/modules/services/tailscale.nix new file mode 100644 index 0000000..b42fa19 --- /dev/null +++ b/shared/modules/services/tailscale.nix @@ -0,0 +1,9 @@ +{ config, lib, ... }: +{ + config = lib.mkIf config.niriwm.enable { + services.tailscale = { + enable = true; + openFirewall = true; + }; + }; +} diff --git a/nate-work/modules/vpn-proxy/vpn-proxy.nix b/shared/modules/services/vpn-proxy/vpn-proxy.nix similarity index 100% rename from nate-work/modules/vpn-proxy/vpn-proxy.nix rename to shared/modules/services/vpn-proxy/vpn-proxy.nix diff --git a/jaci/modules/niri/niri_home.nix b/shared/modules/wm/niri-home.nix similarity index 80% rename from jaci/modules/niri/niri_home.nix rename to shared/modules/wm/niri-home.nix index 7b4ddfe..3517179 100644 --- a/jaci/modules/niri/niri_home.nix +++ b/shared/modules/wm/niri-home.nix @@ -1,14 +1,14 @@ -{ inputs, lib, config, pkgs, ... }: +{ lib, config, pkgs, ... }: { imports = [ - ../../../shared/modules/home-manager/waybar.nix + ../home-manager/waybar.nix ]; options.nirihome = { enable = lib.mkEnableOption "Enable niri home config"; homePackages = lib.mkOption { - default = []; - description = "Add any additional packages desired. Merged with niri defaults."; + default = [ ]; + description = "Add any additional packages desired. Merged with niri defaults."; }; }; @@ -21,7 +21,7 @@ # Manually overriding session vars conflicts with xdg-desktop-portal-gnome # screencasting (breaks Zoom screen sharing). - # Cursor is managed by Stylix (stylix.cursor in jaci/default.nix) + # Cursor is managed by Stylix (stylix.cursor in host config) # Waybar with Stylix theming waybarConfig.enable = true; @@ -41,7 +41,6 @@ libnotify swaynotificationcenter # Tray Applets - # networkmanagerapplet # Noctalia handles wifi pavucontrol syncthingtray tailscale-systray diff --git a/jaci/modules/niri/niri_conf.nix b/shared/modules/wm/niri.nix similarity index 73% rename from jaci/modules/niri/niri_conf.nix rename to shared/modules/wm/niri.nix index e704fbe..ec80a2b 100644 --- a/jaci/modules/niri/niri_conf.nix +++ b/shared/modules/wm/niri.nix @@ -6,6 +6,7 @@ ... }: let + cfg = config.niriwm; unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; @@ -30,15 +31,13 @@ in }; user = lib.mkOption { type = lib.types.str; + description = "Primary user for niri-related service configs"; }; }; - ### - ## Configuration - ### - config = lib.mkIf config.niriwm.enable { + config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfree = config.niriwm.useNonFree; + nixpkgs.config.allowUnfree = cfg.useNonFree; # Portal config: programs.niri.enable adds xdg-desktop-portal-gnome # and niri-portals.conf via configPackages, but the portal daemon @@ -63,7 +62,6 @@ in egl-wayland git glib # gsettings - gnome-software # GUI app store for Flatpak grim libnotify lxqt.lxqt-policykit @@ -74,22 +72,18 @@ in unstable.ghostty unstable.xwayland-satellite wl-clipboard - # wofi is in programs.nix for Stylix theming xdg-utils zsh ] - config.niriwm.systemPackages + cfg.systemPackages ]; environment.variables.QT_STYLE_OVERRIDE = "kvantum"; environment.sessionVariables = { - # use wayland MOZ_ENABLE_WAYLAND = "1"; # QT_QPA_PLATFORM and GDK_BACKEND must NOT be set - they break the screencast portal WLR_NO_HARDWARE_CURSORS = "1"; ELECTRON_OZONE_PLATFORM_HINT = "auto"; NIXOS_OZONE_WL = "1"; - # VA-API driver for hardware video acceleration (Intel 13th gen) - LIBVA_DRIVER_NAME = "iHD"; }; programs.gamemode = { @@ -103,11 +97,12 @@ in }; }; programs.niri.enable = true; - programs.regreet.enable = true; + programs.regreet.enable = lib.mkDefault true; programs.xfconf.enable = true; programs.zsh.enable = true; programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead - programs.steam.enable = config.niriwm.installGaming; + programs.adb.enable = true; + programs.steam.enable = lib.mkDefault cfg.installGaming; # For nautilus services.gnome.sushi.enable = true; @@ -126,14 +121,16 @@ in ### ## Services ### - # services.blueman.enable = true; # Noctalia handles bluetooth services.gvfs.enable = true; # file manager mount, trash, etc services.tumbler.enable = true; # thumbnails services.openssh.enable = true; services.dbus.enable = true; services.gnome.gnome-keyring.enable = true; services.flatpak.enable = true; - services.usbmuxd.enable = false; + services.usbmuxd.enable = lib.mkDefault false; + + # For yubioath desktop + services.pcscd.enable = lib.mkDefault true; # Printing services.printing = { @@ -142,8 +139,7 @@ in drivers = [ pkgs.brlaser ]; }; - # Audio - Modern PipeWire setup for Framework laptop - # Disable PulseAudio in favor of PipeWire + # Audio - PipeWire services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { @@ -153,6 +149,13 @@ in alsa.support32Bit = true; pulse.enable = true; wireplumber.enable = true; + # Raise minimum buffer to reduce audio popping caused by USB bus + # contention (e.g. webcam + audio interfaces sharing a controller) + extraConfig.pipewire."10-clock-settings" = { + "context.properties" = { + "default.clock.min-quantum" = 512; + }; + }; wireplumber.extraConfig = { "wireplumber.settings" = { bluetooth.autoswitch-to-headset-profile = false; @@ -162,7 +165,6 @@ in "bluez5.enable-sbc-xq" = true; "bluez5.enable-msbc" = true; "bluez5.enable-hw-volume" = true; - # Default roles "bluez5.roles" = [ "a2dp_sink" "a2dp_source" @@ -179,7 +181,6 @@ in ### ## Misc ### - # Necessary for home-manager niri setup security.polkit.enable = true; # Keyring setup @@ -187,30 +188,37 @@ in security.pam.services.login.enableGnomeKeyring = true; hardware.bluetooth = { - enable = true; - powerOnBoot = true; + enable = lib.mkDefault true; + powerOnBoot = lib.mkDefault true; settings = { General = { - Name = "Jaci-Frame"; - ControllerMode = "dual"; - FastConnectable = "true"; - Experimental = "true"; + ControllerMode = lib.mkDefault "dual"; + FastConnectable = lib.mkDefault "true"; + Experimental = lib.mkDefault "true"; }; Policy = { - AutoEnable = "true"; + AutoEnable = lib.mkDefault "true"; }; LE = { - EnableAdvMonInterleaveScan = 1; + EnableAdvMonInterleaveScan = lib.mkDefault 1; }; }; }; - # # Hardware scanning support - # hardware.sane = { - enable = true; - brscan5.enable = true; + enable = lib.mkDefault true; + brscan5.enable = lib.mkDefault true; }; + + # Man pages + documentation.dev.enable = lib.mkDefault true; + + # Betaflight configurator udev rules (shared across hosts that use it) + services.udev.extraRules = lib.mkDefault '' + # DFU (Internal bootloader for STM32 and AT32 MCUs) + SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + ''; }; }