Refactor configs to be much more shared. Big refactor using more shared modules, etc
18
flake.lock
generated
@ -71,11 +71,11 @@
|
|||||||
"firefox-gnome-theme": {
|
"firefox-gnome-theme": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764873433,
|
"lastModified": 1773024283,
|
||||||
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
|
"narHash": "sha256-6cGDN/2iSNUJWp035zzr6BZCzFtO92PIKNeWxuwPPcA=",
|
||||||
"owner": "rafaelmardojai",
|
"owner": "rafaelmardojai",
|
||||||
"repo": "firefox-gnome-theme",
|
"repo": "firefox-gnome-theme",
|
||||||
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
|
"rev": "43bc26501a637c68df723645966b77168cefa9d0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -200,11 +200,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772047000,
|
"lastModified": 1773814637,
|
||||||
"narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=",
|
"narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",
|
"rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -216,11 +216,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771848320,
|
"lastModified": 1773821835,
|
||||||
"narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=",
|
"narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2fc6539b481e1d2569f25f8799236694180c0993",
|
"rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
27
flake.nix
@ -12,6 +12,9 @@
|
|||||||
stylix = {
|
stylix = {
|
||||||
url = "github:nix-community/stylix/release-25.11";
|
url = "github:nix-community/stylix/release-25.11";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
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";
|
nur.url = "github:nix-community/NUR";
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
@ -41,12 +44,12 @@
|
|||||||
inputs.home-manager.nixosModules.home-manager {
|
inputs.home-manager.nixosModules.home-manager {
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = 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 = {
|
home-manager.extraSpecialArgs = {
|
||||||
inherit inputs outputs;
|
inherit inputs outputs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./luci/default.nix
|
./hosts/luci/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
nate = nixpkgs.lib.nixosSystem {
|
nate = nixpkgs.lib.nixosSystem {
|
||||||
@ -60,12 +63,12 @@
|
|||||||
inputs.home-manager.nixosModules.home-manager {
|
inputs.home-manager.nixosModules.home-manager {
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = 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 = {
|
home-manager.extraSpecialArgs = {
|
||||||
inherit inputs outputs unstablePkgs;
|
inherit inputs outputs unstablePkgs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./nate/default.nix
|
./hosts/nate/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
nate-work = nixpkgs.lib.nixosSystem {
|
nate-work = nixpkgs.lib.nixosSystem {
|
||||||
@ -79,12 +82,12 @@
|
|||||||
inputs.home-manager.nixosModules.home-manager {
|
inputs.home-manager.nixosModules.home-manager {
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = 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 = {
|
home-manager.extraSpecialArgs = {
|
||||||
inherit inputs outputs unstablePkgs;
|
inherit inputs outputs unstablePkgs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./nate-work/default.nix
|
./hosts/nate-work/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
jaci = nixpkgs.lib.nixosSystem {
|
jaci = nixpkgs.lib.nixosSystem {
|
||||||
@ -98,12 +101,12 @@
|
|||||||
inputs.home-manager.nixosModules.home-manager {
|
inputs.home-manager.nixosModules.home-manager {
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = 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 = {
|
home-manager.extraSpecialArgs = {
|
||||||
inherit inputs outputs unstablePkgs;
|
inherit inputs outputs unstablePkgs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./jaci/default.nix
|
./hosts/jaci/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
# DEPRECATED: scrappy system is no longer in use
|
# DEPRECATED: scrappy system is no longer in use
|
||||||
@ -117,12 +120,12 @@
|
|||||||
# inputs.home-manager.nixosModules.home-manager {
|
# inputs.home-manager.nixosModules.home-manager {
|
||||||
# home-manager.useGlobalPkgs = true;
|
# home-manager.useGlobalPkgs = true;
|
||||||
# home-manager.useUserPackages = 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 = {
|
# home-manager.extraSpecialArgs = {
|
||||||
# inherit inputs outputs unstablePkgs;
|
# inherit inputs outputs unstablePkgs;
|
||||||
# };
|
# };
|
||||||
# }
|
# }
|
||||||
# ./scrappy/default.nix
|
# ./hosts/scrappy/default.nix
|
||||||
# ];
|
# ];
|
||||||
# };
|
# };
|
||||||
frame12 = nixpkgs.lib.nixosSystem {
|
frame12 = nixpkgs.lib.nixosSystem {
|
||||||
@ -136,12 +139,12 @@
|
|||||||
inputs.home-manager.nixosModules.home-manager {
|
inputs.home-manager.nixosModules.home-manager {
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = 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 = {
|
home-manager.extraSpecialArgs = {
|
||||||
inherit inputs outputs unstablePkgs;
|
inherit inputs outputs unstablePkgs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./frame12/default.nix
|
./hosts/frame12/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
|
||||||
@ -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?
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -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"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
128
hosts/frame12/default.nix
Normal file
@ -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";
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 960 B After Width: | Height: | Size: 960 B |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 946 B After Width: | Height: | Size: 946 B |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |