rename myOptions to modules

This commit is contained in:
Dragyx 2024-04-12 22:03:29 +02:00
commit 15827edc6c
45 changed files with 1065 additions and 89 deletions

390
flake.lock generated
View file

@ -21,6 +21,27 @@
"type": "github" "type": "github"
} }
}, },
"anyrun": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1712136515,
"narHash": "sha256-LpjQJYC24S5P5XhJsZX6HqsQT1pohcFzM6N42I6qo/U=",
"owner": "Kirottu",
"repo": "anyrun",
"rev": "be6728884d543665e7bd137bbef62dc1d04a210b",
"type": "github"
},
"original": {
"owner": "Kirottu",
"repo": "anyrun",
"type": "github"
}
},
"crane": { "crane": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -87,6 +108,21 @@
} }
}, },
"flake-compat": { "flake-compat": {
"locked": {
"lastModified": 1688025799,
"narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1696426674,
@ -103,6 +139,49 @@
} }
}, },
"flake-parts": { "flake-parts": {
"inputs": {
"nixpkgs-lib": [
"anyrun",
"nixpkgs"
]
},
"locked": {
"lastModified": 1696343447,
"narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"nixpkgs-wayland",
"nix-eval-jobs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1701473968,
"narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_3": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"schizofox", "schizofox",
@ -123,9 +202,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_2": { "flake-parts_4": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib_2"
}, },
"locked": { "locked": {
"lastModified": 1698882062, "lastModified": 1698882062,
@ -141,6 +220,24 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils": {
"inputs": {
"systems": "systems_5"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"hercules-ci-effects": { "hercules-ci-effects": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@ -335,6 +432,127 @@
"type": "github" "type": "github"
} }
}, },
"hyprlang_2": {
"inputs": {
"nixpkgs": [
"hyprlock",
"nixpkgs"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1711250455,
"narHash": "sha256-LSq1ZsTpeD7xsqvlsepDEelWRDtAhqwetp6PusHXJRo=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "b3e430f81f3364c5dd1a3cc9995706a4799eb3fa",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlock": {
"inputs": {
"hyprlang": "hyprlang_2",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4"
},
"locked": {
"lastModified": 1712861866,
"narHash": "sha256-7ISUD6Z8FivTw/Db8tGJdiJeqpvJs7CSCwadopb1oro=",
"owner": "hyprwm",
"repo": "hyprlock",
"rev": "6fa65e1172d633e61ed957a49e7cf96010432623",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlock",
"type": "github"
}
},
"lib-aggregate": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1712491724,
"narHash": "sha256-E5EcBzf/zaR3hD8g1CDtqqwXXebSWtqOvoaR+LDjTME=",
"owner": "nix-community",
"repo": "lib-aggregate",
"rev": "2737d0204685c3274390229a09eb8f7eaa1a9e89",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "lib-aggregate",
"type": "github"
}
},
"nix-eval-jobs": {
"inputs": {
"flake-parts": "flake-parts_2",
"nix-github-actions": "nix-github-actions",
"nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1705242886,
"narHash": "sha256-TLj334vRwFtSym3m+NnKcNCnKKPNoTC/TDZL40vmOso=",
"owner": "nix-community",
"repo": "nix-eval-jobs",
"rev": "6b03a93296faf174b97546fd573c8b379f523a8d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-eval-jobs",
"type": "github"
}
},
"nix-filter": {
"locked": {
"lastModified": 1693833173,
"narHash": "sha256-hlMABKrGbEiJD5dwUSfnw1CQ3bG7KKwDV+Nx3bEZd7U=",
"owner": "numtide",
"repo": "nix-filter",
"rev": "ac030bd9ba98e318e1f4c4328d60766ade8ebe8b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "nix-filter",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"nixpkgs-wayland",
"nix-eval-jobs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1701208414,
"narHash": "sha256-xrQ0FyhwTZK6BwKhahIkUVZhMNk21IEI1nUcWSONtpo=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "93e39cc1a087d65bcf7a132e75a650c44dd2b734",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixpak": { "nixpak": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@ -378,6 +596,21 @@
} }
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": {
"lastModified": 1712450863,
"narHash": "sha256-K6IkdtMtq9xktmYPj0uaYc8NsIqHuaAoRBaMgu9Fvrw=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "3c62b6a12571c9a7f65ab037173ee153d539905f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-lib_2": {
"locked": { "locked": {
"dir": "lib", "dir": "lib",
"lastModified": 1698611440, "lastModified": 1698611440,
@ -395,6 +628,27 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-wayland": {
"inputs": {
"flake-compat": "flake-compat",
"lib-aggregate": "lib-aggregate",
"nix-eval-jobs": "nix-eval-jobs",
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1712942143,
"narHash": "sha256-pTpvq5EXPD9noOBkmTEa7mkwMpeda8+8u3anmjxhRAI=",
"owner": "nix-community",
"repo": "nixpkgs-wayland",
"rev": "8ed6e0db00db83e5a598afa6cdf32c9b41f083bd",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs-wayland",
"type": "github"
}
},
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1712791164, "lastModified": 1712791164,
@ -411,6 +665,38 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": {
"locked": {
"lastModified": 1703134684,
"narHash": "sha256-SQmng1EnBFLzS7WSRyPM9HgmZP2kLJcPAz+Ug/nug6o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d6863cbcbbb80e71cecfc03356db1cda38919523",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1712791164,
"narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1712918680, "lastModified": 1712918680,
@ -429,12 +715,16 @@
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"anyrun": "anyrun",
"fenix": "fenix", "fenix": "fenix",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"hyprland": "hyprland", "hyprland": "hyprland",
"hyprlock": "hyprlock",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"nixpkgs-wayland": "nixpkgs-wayland",
"nur": "nur", "nur": "nur",
"schizofox": "schizofox" "schizofox": "schizofox",
"split-monitor-workspaces": "split-monitor-workspaces"
} }
}, },
"rust-analyzer-src": { "rust-analyzer-src": {
@ -456,8 +746,8 @@
}, },
"schizofox": { "schizofox": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"flake-parts": "flake-parts", "flake-parts": "flake-parts_3",
"home-manager": "home-manager_3", "home-manager": "home-manager_3",
"nixpak": "nixpak", "nixpak": "nixpak",
"nixpkgs": [ "nixpkgs": [
@ -482,7 +772,7 @@
"searx-randomizer": { "searx-randomizer": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_4",
"nixpkgs": [ "nixpkgs": [
"schizofox", "schizofox",
"nixpkgs" "nixpkgs"
@ -502,6 +792,27 @@
"type": "github" "type": "github"
} }
}, },
"split-monitor-workspaces": {
"inputs": {
"hyprland": [
"hyprland"
],
"nix-filter": "nix-filter"
},
"locked": {
"lastModified": 1712527107,
"narHash": "sha256-stmJqifOWf8oXxKwHvCo3RaVapXSk1n/+Sf9nKNENEA=",
"owner": "Duckonaut",
"repo": "split-monitor-workspaces",
"rev": "c5696000777f6586aaa255bd0a9b0627d5da911f",
"type": "github"
},
"original": {
"owner": "Duckonaut",
"repo": "split-monitor-workspaces",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -532,6 +843,73 @@
"type": "github" "type": "github"
} }
}, },
"systems_3": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs-wayland",
"nix-eval-jobs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1702979157,
"narHash": "sha256-RnFBbLbpqtn4AoJGXKevQMCGhra4h6G2MPcuTSZZQ+g=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "2961375283668d867e64129c22af532de8e77734",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"wlroots": { "wlroots": {
"flake": false, "flake": false,
"locked": { "locked": {

View file

@ -37,4 +37,15 @@ in {
inputs.agenix.nixosModules.default inputs.agenix.nixosModules.default
]; ];
}; };
flocke = lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit lib inputs self; };
modules = [
./dragyx/flocke
../modules
inputs.home-manager.nixosModules.home-manager
inputs.agenix.nixosModules.default
];
};
} }

View file

@ -0,0 +1,65 @@
# which default packages to use for the system
{ inputs, outputs, profile-config, pkgs, ...}:
let
python-packages = ps: with ps; [
pandas
numpy
opencv4
ipython
];
in
{
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
(python3.withPackages python-packages)
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
neovim
eza # exa is unmaintained
hwinfo
zsh
git
broot
unzip
rsync
# neofetch
# fastfetch has the option to set a timeout for
# for each module, which makes it dramatically faster
# as counting the number of packages takes over 800 (!!!) ms,
# which makes it very unpleasant to use as default thing
# to display when starting a terminal
fastfetch
alacritty
wget
gnumake
zoxide
python3
nodejs
gcc
cargo
rustc
rust-analyzer
clippy
lsof
htop
okular
smartmontools
networkmanager
pkg-config
sof-firmware # audio
nix-index
# --------- optional
gnome.eog
sherlock
xfce.thunar
plocate
alsa-utils
# partition management
parted
gnufdisk
lapce
];
}

View file

@ -0,0 +1,163 @@
{ config, pkgs, ... }:
{
imports = [
../../../options/common/pin-registry.nix
../../../options/common/preserve-system.nix
../../../options/desktop/fonts.nix
];
nixpkgs.config.allowUnfree = true;
time.timeZone = "Europe/Zurich";
security.sudo.package = pkgs.sudo.override { withInsults = true; };
services.xserver = {
enable = true;
displayManager = {
sessionPackages = [ pkgs.hyprland ]; # pkgs.gnome.gnome-session.sessions ];
defaultSession = "hyprland";
sddm = {
enable = true;
};
};
windowManager.hypr.enable = true;
};
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
hardware.opengl.driSupport = true;
hardware.opengl.driSupport32Bit = true;
hardware.opengl.enable = true;
services.logrotate.checkConfig = false;
networking.hostName = "flocke"; # Define your hostname.
networking.hostId = "adf23c31";
networking.interfaces.wlp1s0.useDHCP = true;
networking.networkmanager.enable = true;
environment.systemPackages = with pkgs; [ networkmanager ]; # cli tool for managing connections
boot = {
kernelParams = [ ];
initrd.supportedFilesystems = [ "ext4" ];
supportedFilesystems = [ "ext4" ];
loader = {
efi.efiSysMountPoint = "/boot";
efi.canTouchEfiVariables = true;
grub = {
enable = true;
device = "nodev";
efiSupport = true;
enableCryptodisk = true;
};
};
initrd.luks.devices = {
cryptroot = {
device = "/dev/disk/by-uuid/ec5ff3a1-9b39-4ba5-aa0f-19e898b4f6e8";
preLVM = true;
};
};
};
# see https://nixos.wiki/wiki/AMD_GPU
services.xserver.videoDrivers = [ "amdgpu" ];
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
];
hardware.opengl.extraPackages = with pkgs; [
rocmPackages.clr.icd
];
services.power-profiles-daemon.enable = false;
# stock nixos power management
powerManagement.enable = true;
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 20;
#Optional helps save long term battery health
START_CHARGE_THRESH_BAT0 = 40; # 40 and bellow it starts to charge
STOP_CHARGE_THRESH_BAT0 = 85; # 80 and above it stops charging
};
};
swapDevices = [ {
device = "/var/lib/swapfile";
size = 32*1024;
} ];
# be nice to your ssds
services.fstrim.enable = true;
# services.xserver.enable = pkgs.lib.mkForce false;
security.polkit.enable = true;
modules = {
other = {
system = {
hostname = "flocke";
username = "dragyx";
monitors = {
name = "LaptopMain";
resolution = {
x = 2256;
y = 1504;
};
scale = 1.0;
refresh_rate = 60;
};
};
home-manager = {
enable = true;
enableDirenv = true;
};
};
programs = {
vesktop.enable = true;
btop.enable = true;
mpv.enable = true;
schizofox.enable = true;
obs.enable = true;
neovim.enable = true;
git = {
enable = true;
userName = "Dragyx";
userEmail = "66752602+Dragyx@users.noreply.github.com";
defaultBranch = "main";
};
starship.enable = true;
zsh = {
enable = true;
profiling = false;
};
# badneovim.enable = true;
};
services = {
pipewire.enable = true;
};
WM.hyprland.enable = true;
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "21.11"; # Did you read the comment?
}

View file

@ -0,0 +1,8 @@
_: {
imports = [
../../../options/desktop/monitors.nix
./configuration.nix
./hardware-configuration.nix
# ./packages.nix
];
}

View file

@ -0,0 +1,35 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ "amdgpu" ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/2aaba0f2-e8dc-4583-a81e-2d35cc238e79";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/9D34-36F8";
fsType = "vfat";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,56 @@
# which default packages to use for the system
{ inputs, outputs, profile-config, pkgs, ...}:
let
python-packages = ps: with ps; [
pandas
numpy
opencv4
ipython
];
in
{
imports = [
../common/packages.nix
];
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# security audits
lynis
element-desktop
jetbrains.idea-community
baobab
amdvlk
texlive.combined.scheme-full
android-tools
signal-desktop
nextcloud-client
etcher
vlc
audacity
thunderbird
eclipses.eclipse-java
openjdk
firefox
# pkgs.nordvpn # nur.repos.LuisChDev.nordvpn
material-icons
material-design-icons
libreoffice
gimp
spotify
okular
# minecraft
prismlauncher-unwrapped
glfw-wayland-minecraft
glxinfo
# window manager
flameshot
feh
# Animeeeeee!
ani-cli # The stable version is very outdated
];
}

View file

@ -5,7 +5,7 @@
security.sudo.package = pkgs.sudo.override { withInsults = true; }; security.sudo.package = pkgs.sudo.override { withInsults = true; };
security.polkit.enable = true; security.polkit.enable = true;
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
myOptions = { modules = {
other = { other = {
system = { system = {
gitPath = "/home/lars/nichts"; gitPath = "/home/lars/nichts";

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
{ {
myOptions = { modules = {
other = { other = {
system = { system = {
hostname = "dyonisos"; hostname = "dyonisos";

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
let let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
home-manager.users.${username} = { home-manager.users.${username} = {
home.packages = let home.packages = let

View file

@ -1,10 +1,10 @@
{ config, lib, inputs, pkgs, ... }: { config, lib, inputs, pkgs, ... }:
with lib; let with lib; let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
cfg = config.myOptions.hyprland; cfg = config.modules.hyprland;
in { in {
options.myOptions.hyprland.nvidia.enable = mkEnableOption "nvidia"; options.modules.hyprland.nvidia.enable = mkEnableOption "nvidia";
options.myOptions.hyprland = { options.modules.hyprland = {
enable = mkEnableOption "hyprland"; enable = mkEnableOption "hyprland";
monitor = mkOption { monitor = mkOption {
description = "hyprland monitor config"; description = "hyprland monitor config";

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
{ {
myOptions = { modules = {
other = { other = {
system = { system = {
hostname = "kronos"; hostname = "kronos";

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
let let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
home-manager.users.${username} = { home-manager.users.${username} = {
home.packages = let home.packages = let

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
let let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
home-manager.users.${username} = { home-manager.users.${username} = {
home.packages = let home.packages = let

View file

@ -1,8 +1,8 @@
{ pkgs, lib, config, ... }: { pkgs, lib, config, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.awesome; cfg = config.modules.programs.awesome;
in { in {
options.myOptions.programs.awesome.enable = mkEnableOption "awesome"; options.modules.programs.awesome.enable = mkEnableOption "awesome";
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.xserver = { services.xserver = {

View file

@ -6,7 +6,7 @@
security.sudo.package = pkgs.sudo.override { withInsults = true; }; security.sudo.package = pkgs.sudo.override { withInsults = true; };
security.polkit.enable = true; security.polkit.enable = true;
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
myOptions = { modules = {
other = { other = {
system = { system = {
hostname = "mars"; hostname = "mars";

View file

@ -2,8 +2,8 @@
with lib; let with lib; let
cfg = config.myOptions.programs.hypr.land; cfg = config.modules.programs.hypr.land;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
hmCfg = config.home-manager.users.${username}; hmCfg = config.home-manager.users.${username};
smwPresent = elem inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces cfg.extraPlugins; smwPresent = elem inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces cfg.extraPlugins;
@ -13,7 +13,7 @@ with lib; let
inherit (inputs.hyprland.packages.${pkgs.system}) hyprland; inherit (inputs.hyprland.packages.${pkgs.system}) hyprland;
inherit (inputs.hyprlock.packages.${pkgs.system}) hyprlock; inherit (inputs.hyprlock.packages.${pkgs.system}) hyprlock;
in { in {
options.myOptions.programs.hypr.land = { options.modules.programs.hypr.land = {
enable = mkEnableOption "huperland"; enable = mkEnableOption "huperland";
startupSound = mkOption { startupSound = mkOption {
type = with types; nullOr path; type = with types; nullOr path;
@ -359,7 +359,7 @@ in {
"[workspace special:rog silent;tile] ${config.services.asusd.package}/bin/rog-control-center") "[workspace special:rog silent;tile] ${config.services.asusd.package}/bin/rog-control-center")
"[workspace special:keepassxc silent;tile] ${pkgs.keepassxc}/bin/keepassxc" "[workspace special:keepassxc silent;tile] ${pkgs.keepassxc}/bin/keepassxc"
(if config.myOptions.programs.foot.server then "sleep 0.5 && ${pkgs.systemd}/bin/systemctl --user restart foot.service" else ";") (if config.modules.programs.foot.server then "sleep 0.5 && ${pkgs.systemd}/bin/systemctl --user restart foot.service" else ";")
"${hyprland}/bin/hyprctl setcursor Bibata-Modern-Classic 24" "${hyprland}/bin/hyprctl setcursor Bibata-Modern-Classic 24"

View file

@ -5,12 +5,12 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.hypr.lock; cfg = config.modules.programs.hypr.lock;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
text_color = "rgba(eae0e4FF)"; text_color = "rgba(eae0e4FF)";
in { in {
options.myOptions.programs.hypr.lock = { options.modules.programs.hypr.lock = {
enable = mkEnableOption "hiper zamek"; enable = mkEnableOption "hiper zamek";
extraSettings = mkOption { extraSettings = mkOption {
type = types.attrs; type = types.attrs;

View file

@ -1,8 +1,8 @@
{ pkgs, lib, config, callPackage, ... }: { pkgs, lib, config, callPackage, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.i3; cfg = config.modules.programs.i3;
in { in {
options.myOptions.programs.i3.enable = mkEnableOption "i3"; options.modules.programs.i3.enable = mkEnableOption "i3";
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.xserver = { services.xserver = {

View file

@ -1,6 +1,6 @@
{ config, inputs, pkgs, ... }: { config, inputs, pkgs, ... }:
let let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
home-manager.users.${username} = { home-manager.users.${username} = {
home.packages = let home.packages = let

View file

@ -4,10 +4,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.git; cfg = config.modules.programs.git;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.git = { options.modules.programs.git = {
enable = mkEnableOption "git"; enable = mkEnableOption "git";
userName = mkOption { userName = mkOption {
type = types.str; type = types.str;

View file

@ -3,16 +3,16 @@
lib, lib,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.starship; cfg = config.modules.programs.starship;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.starship.enable = mkEnableOption "starship"; options.modules.programs.starship.enable = mkEnableOption "starship";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {
programs.starship = { programs.starship = {
enable = true; enable = true;
enableZshIntegration = config.myOptions.programs.zsh.enable; enableZshIntegration = config.modules.programs.zsh.enable;
settings = { settings = {
add_newline = false; add_newline = false;
command_timeout = 1000; command_timeout = 1000;

View file

@ -1,11 +1,11 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.zsh; cfg = config.modules.programs.zsh;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
hostname = config.myOptions.other.system.hostname; hostname = config.modules.other.system.hostname;
gitPath = config.myOptions.other.system.gitPath; gitPath = config.modules.other.system.gitPath;
in { in {
options.myOptions.programs.zsh = { options.modules.programs.zsh = {
enable = mkEnableOption "zsh"; enable = mkEnableOption "zsh";
extraAliases = mkOption { extraAliases = mkOption {
type = types.attrs; type = types.attrs;

View file

@ -0,0 +1,5 @@
_: {
imports = [
./hyprland.nix
];
}

185
modules/gui/WM/hyprland.nix Normal file
View file

@ -0,0 +1,185 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.modules.WM.hyprland;
username = config.modules.other.system.username;
monitors = config.modules.other.system.monitors;
in
{
options.modules.WM.hyprland = {
enable = mkEnableOption "hyprland";
gnome-keyring = mkEnableOption "gnome-keyring";
};
config = mkIf cfg.enable {
programs.xwayland.enable = true;
/*
programs.hyprland = {
enable = true;
xwayland = true;
};
*/
services.gnome.gnome-keyring.enable = mkDefault cfg.gnome-keyring;
systemd.user.services.polkit-gnome-authentication-agent-1 = mkIf cfg.gnome-keyring {
description = "polkit-gnome-authentication-agent-1";
wantedBy = [ "graphical-session.target" ];
wants = [ "graphical-session.target" ];
after = [ "graphical-session.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
home-manager.users.${username} = {
home.packages = with pkgs; [
rofi
waybar
hyprpaper
hyprlock
hyprland
hyprshade
lxqt.lxqt-openssh-askpass
dunst
# wireplumber
unstable.xwayland
pciutils # lspci is needed by hyprland
# from some obscure tutorial on youtube
# xorg.libxcb
# mesa
libglvnd
egl-wayland
libdrm
vulkan-tools
dunst
swww
flameshot
bluetuith
brightnessctl
# needed for wayland copy / paste support in neovim
wl-clipboard
];
programs.hyprland = {
enable = true;
settings = {
exec-once = mkIf cfg.gnome-keyring "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
monitor = map (
m: "${m.device},${m.resolution.x}x${m.resolution.y}@${m.refresh_rate},${m.position.x}x${m.position.y},${m.scale},transform,${m.transform}"
) monitors; #TODO: default value
input = {
kb_layout = console.keyMap;
natural_scroll = true;
sensitivity = 0;
};
general = {
gaps_in = 2;
gaps_out = 1;
border_size = 1;
col.active_border = "rgba(33ccffee) rgba(00ff99ee) 45deg";
col.inactive_border = "rgba(595959aa)";
layout = dwindle;
};
decoration.rounding = 5;
misc.disable_hyprland_logo = true;
animations = {
enabled = true;
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = ["myBezier, 0.05, 0.9, 0.1, 1.05"];
animation = [
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
"windows, 1, 7, myBezier"
];
};
gestures.workspace_swipe = true;
debug.enable_stdout_logs = true;
bind = [
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
"SUPER, RETURN, exec, alacritty"
"SUPER SHIFT, RETURN, exec, rofi -show drun"
"SUPER SHIFT, Q, killactive,"
"SUPER, M, exit, "
"SUPER, B, exec, firefox"
"SUPER, f, fullscreen"
"SUPER, E, exec, nautilus --new-window "
"SUPER, V, togglefloating, "
"SUPER, P, pseudo, # dwindle"
"SUPER, S, togglesplit, # dwindle"
"SUPER, C, exec, /home/vali/.config/wallpaper/colorscheme-setter"
",PRINT, exec, flameshot"
"binde = ,XF86MonBrightnessUp, exec, brightnessctl set 10%+"
"binde = ,XF86MonBrightnessDown, exec, brightnessctl set 10%-"
# Example volume button that allows press and hold, volume limited to 150%"
"binde = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
# Example volume button that will activate even while an input inhibitor is active"
"binde = ,XF86AudioLowerVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"
",XF86AudioMute, exec, $ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
# Move focus with mainMod + arrow keys"
"SUPER, h, movefocus, l"
"SUPER, l, movefocus, r"
"SUPER, k, movefocus, u"
"SUPER, j, movefocus, d"
# move window to next / previous workspace"
"SUPER CTRL, h, movetoworkspace, -1"
"SUPER CTRL, l, movetoworkspace, +1"
# move to next / previous workspace"
"SUPER CTRL, h, workspace, -1"
"SUPER CTRL, l, workspace, +1"
# Switch workspaces with mainMod + [0-9]"
"SUPER, 1, workspace, 1"
"SUPER, 2, workspace, 2"
"SUPER, 3, workspace, 3"
"SUPER, 4, workspace, 4"
"SUPER, 5, workspace, 5"
"SUPER, 6, workspace, 6"
"SUPER, 7, workspace, 7"
"SUPER, 8, workspace, 8"
"SUPER, 9, workspace, 9"
"SUPER, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]"
"SUPER SHIFT, 1, movetoworkspace, 1"
"SUPER SHIFT, 2, movetoworkspace, 2"
"SUPER SHIFT, 3, movetoworkspace, 3"
"SUPER SHIFT, 4, movetoworkspace, 4"
"SUPER SHIFT, 5, movetoworkspace, 5"
"SUPER SHIFT, 6, movetoworkspace, 6"
"SUPER SHIFT, 7, movetoworkspace, 7"
"SUPER SHIFT, 8, movetoworkspace, 8"
"SUPER SHIFT, 9, movetoworkspace, 9"
"SUPER SHIFT, 0, movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll"
"SUPER, mouse_down, workspace, e+1"
"SUPER, mouse_up, workspace, e-1"
"
# Move/resize windows with mainMod + LMB/RMB and dragging"
#bindm = SUPER, mouse:272, movewindow"
#bindm = SUPER, mouse:273, resizewindow"
];
};
};
};
};
}

View file

@ -3,10 +3,10 @@
lib, lib,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.themes.cursor; cfg = config.modules.themes.cursor;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.themes.cursor = { options.modules.themes.cursor = {
enable = mkEnableOption "cursor theming"; enable = mkEnableOption "cursor theming";
package = mkOption { package = mkOption {
description = "cursor theme package"; description = "cursor theme package";

View file

@ -10,5 +10,6 @@ _: {
./obs.nix ./obs.nix
./foot.nix ./foot.nix
# ./vivado.nix # ./vivado.nix
./WM
]; ];
} }

View file

@ -5,10 +5,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.foot; cfg = config.modules.programs.foot;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.foot = { options.modules.programs.foot = {
enable = mkEnableOption "foot"; enable = mkEnableOption "foot";
server = mkEnableOption "foot server mode"; server = mkEnableOption "foot server mode";
}; };

View file

@ -3,11 +3,11 @@
lib, lib,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.themes.gtk; cfg = config.modules.themes.gtk;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
hmCfg = config.home-manager.users.${username}; hmCfg = config.home-manager.users.${username};
in { in {
options.myOptions.themes.gtk = { options.modules.themes.gtk = {
enable = mkEnableOption "gtk theming"; enable = mkEnableOption "gtk theming";
name = mkOption { name = mkOption {
description = "gtk theme name"; description = "gtk theme name";

View file

@ -4,10 +4,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.mpv; cfg = config.modules.programs.mpv;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.mpv.enable = mkEnableOption "mpv"; options.modules.programs.mpv.enable = mkEnableOption "mpv";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {

View file

@ -1,9 +1,9 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.obs; cfg = config.modules.programs.obs;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.obs.enable = mkEnableOption "obs"; options.modules.programs.obs.enable = mkEnableOption "obs";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {

View file

@ -4,10 +4,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.themes.qt; cfg = config.modules.themes.qt;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.themes.qt = { options.modules.themes.qt = {
enable = mkEnableOption "qt theming"; enable = mkEnableOption "qt theming";
name = mkOption { name = mkOption {
description = "qt theme name"; description = "qt theme name";

View file

@ -1,9 +1,9 @@
{ config, inputs, lib, ... }: { config, inputs, lib, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.schizofox; cfg = config.modules.programs.schizofox;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.schizofox = { options.modules.programs.schizofox = {
enable = mkEnableOption "schizofox"; enable = mkEnableOption "schizofox";
}; };

View file

@ -4,10 +4,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.vesktop; cfg = config.modules.programs.vesktop;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.vesktop = { options.modules.programs.vesktop = {
enable = mkEnableOption "vesktop"; enable = mkEnableOption "vesktop";
}; };

View file

@ -6,11 +6,11 @@ let
desktopName = "Vivado"; desktopName = "Vivado";
exec = "${pkgs.nur.repos.lschuermann.vivado-2022_2}/bin/vivado"; exec = "${pkgs.nur.repos.lschuermann.vivado-2022_2}/bin/vivado";
}; };
cfg = with lib; [ config.myOptions.programs.vivado ]; cfg = with lib; [ config.modules.programs.vivado ];
username = with lib; [ config.myOptions.other.system.username ]; username = with lib; [ config.modules.other.system.username ];
in in
{ {
options.myOptions.programs.vivado.enable = mkEnableOption "vivado"; options.modules.programs.vivado.enable = mkEnableOption "vivado";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {

View file

@ -4,10 +4,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.zathura; cfg = config.modules.programs.zathura;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.zathura.enable = mkEnableOption "zathura"; options.modules.programs.zathura.enable = mkEnableOption "zathura";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {

View file

@ -1,8 +1,8 @@
{pkgs, lib, config, ...}: {pkgs, lib, config, ...}:
with lib; let with lib; let
cfg = config.myOptions.programs.displaymanager; cfg = config.modules.programs.displaymanager;
in { in {
options.myOptions.programs.displaymanager.enable = mkEnableOption "displaymanager"; options.modules.programs.displaymanager.enable = mkEnableOption "displaymanager";
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.xserver.displayManager = { services.xserver.displayManager = {

View file

@ -5,10 +5,10 @@
self, self,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.other.home-manager; cfg = config.modules.other.home-manager;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.other.home-manager = { options.modules.other.home-manager = {
enable = mkEnableOption "home-manager"; enable = mkEnableOption "home-manager";
enableDirenv = mkEnableOption "direnv"; enableDirenv = mkEnableOption "direnv";
}; };

View file

@ -3,9 +3,9 @@
lib, lib,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.other.system; cfg = config.modules.other.system;
in { in {
options.myOptions.other.system = { options.modules.other.system = {
hostname = mkOption { hostname = mkOption {
description = "hostname for this system"; description = "hostname for this system";
type = types.str; type = types.str;

View file

@ -2,7 +2,7 @@
config, config,
... ...
}: let }: let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
hmCfg = config.home-manager.users.${username}; hmCfg = config.home-manager.users.${username};
primary_browser = "firefox-schizo.desktop"; primary_browser = "firefox-schizo.desktop";
@ -31,7 +31,7 @@ in {
XAUTHORITY = "\$XDG_RUNTIME_DIR/Xauthority"; XAUTHORITY = "\$XDG_RUNTIME_DIR/Xauthority";
}; };
*/ */
myOptions.programs.zsh.extraAliases = { modules.programs.zsh.extraAliases = {
gdb = "gdb -n -x ${hmCfg.xdg.configHome}/gdb/init"; gdb = "gdb -n -x ${hmCfg.xdg.configHome}/gdb/init";
pidgin = "pidgin --config=${hmCfg.xdg.dataHome}/purple"; pidgin = "pidgin --config=${hmCfg.xdg.dataHome}/purple";
svn = "svn --config-dir ${hmCfg.xdg.configHome}/subversion"; svn = "svn --config-dir ${hmCfg.xdg.configHome}/subversion";

View file

@ -1,8 +1,8 @@
{ config, lib, ... }: { config, lib, ... }:
with lib; let with lib; let
cfg = config.myOptions.services.pipewire; cfg = config.modules.services.pipewire;
in { in {
options.myOptions.services.pipewire.enable = mkEnableOption "pipewire"; options.modules.services.pipewire.enable = mkEnableOption "pipewire";
config = mkIf cfg.enable { config = mkIf cfg.enable {
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;

View file

@ -1,9 +1,9 @@
{ config, lib, ... }: { config, lib, ... }:
with lib; let with lib; let
cfg = config.myOptions.programs.btop; cfg = config.modules.programs.btop;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.btop.enable = mkEnableOption "btop"; options.modules.programs.btop.enable = mkEnableOption "btop";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { home-manager.users.${username} = {

View file

@ -5,10 +5,10 @@
pkgs, pkgs,
... ...
}: with lib; let }: with lib; let
cfg = config.myOptions.programs.neovim; cfg = config.modules.programs.neovim;
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
options.myOptions.programs.neovim.enable = mkEnableOption "neovim"; options.modules.programs.neovim.enable = mkEnableOption "neovim";
config = mkIf cfg.enable { config = mkIf cfg.enable {
nixpkgs.overlays = [ inputs.neovim-nightly-overlay.overlay ]; nixpkgs.overlays = [ inputs.neovim-nightly-overlay.overlay ];

View file

@ -1,6 +1,6 @@
{ config, lib, ... }: { config, lib, ... }:
let let
username = config.myOptions.other.system.username; username = config.modules.other.system.username;
in { in {
networking = { networking = {
networkmanager = { networkmanager = {

View file

@ -0,0 +1,69 @@
{ config, lib, ... }:
with lib;
{
options.modules.other.system.monitors = mkOption {
description = "
List of monitors to use
";
default = [];
type = with types; listOf submodule {
name = mkOption {
type = types.str;
description = "Give your monitor a cute name";
default = "monitor0(I am lazy)";
};
device = mkOption {
type = types.str;
description = "The actual device name of the monitor";
};
resolution = mkOption {
type = types.submodule {
width = mkOption {
type = types.int;
description = "monitor width";
default = "1920";
};
height = mkOption {
type = types.int;
description = "monitor height";
default = "1080";
};
};
};
scale = mkOption {
type = types.number;
description = "monitor scale";
default = 1.0;
};
refresh_rate = mkOption {
type = types.int;
description = "monitor refresh rate (in Hz)";
default = 60;
};
position = mkOption {
type = types.submodule {
x = mkOption {
type = types.int;
default = 0;
};
y = mkOption {
type = types.int;
default = 0;
};
};
description = "absolute monitor posititon";
default = {
x = 0;
y = 0;
};
};
transform = mkOption {
type = types.ints.between 0 3;
description = "Rotation of the monitor counterclockwise";
default = 0;
};
};
};
}