added new usb system, started modularizing

This commit is contained in:
Remy Moll 2025-06-13 18:52:13 +02:00
parent 58b0456f8c
commit 0a731ef17f
17 changed files with 669 additions and 354 deletions

View File

@ -53,13 +53,37 @@
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy.nix
./users/remy_spectre
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}
];
};
nixosConfigurations.nichts = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/lenovo-yoga-usb
stylix.nixosModules.stylix
inputs.superfreq.nixosModules.default
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy_yoga-usb
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}
];
};
# nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem {
# system = "aarch64-linux";
# modules = [

View File

@ -0,0 +1,52 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# Use the "experimental" flakes for cleaner config
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nixpkgs.config.allowUnfree = true;
# Use latest kernel.
boot.kernelPackages = pkgs.linuxPackages_latest;
networking.hostName = "nichts";
# Pick only one of the below networking options.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Set your time zone.
time.timeZone = "Europe/Berlin";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
# i18n.supportedLocales = [ "en_US.UTF-8" "de_DE.UTF-8" ];
# Define a user account. Don't forget to set a password with passwd.
users.users.remy = {
isNormalUser = true;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
};
networking.networkmanager.wifi.powersave = true;
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

@ -0,0 +1,25 @@
{lib, config, options, pkgs, ...}:
{
# Merge the configuration and hardware configuration
imports = [
./configuration.nix
./hardware-configuration.nix
../../modules/nixos/bluetooth.nix
../../modules/nixos/flakes.nix
../../modules/nixos/flatpak.nix
../../modules/nixos/fonts.nix
../../modules/nixos/hyprland.nix
../../modules/nixos/ld.nix
../../modules/nixos/monitoring.nix
../../modules/nixos/networking.nix
../../modules/nixos/nh.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix
../../modules/nixos/power.nix
../../modules/nixos/stylix.nix
../../modules/nixos/usb_config.nix
../../utils/binary-cache.nix
../../utils/garbage-collection.nix
];
}

View File

@ -0,0 +1,40 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/621498e8-64f6-4979-8489-3dc1d145e349";
fsType = "ext4";
};
boot.initrd.luks.devices."root-enc".device = "/dev/disk/by-uuid/156d0f15-397c-4bc6-8f57-026108975246";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/B2D0-672E";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
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

@ -3,7 +3,7 @@
programs.vscode = {
enable = true;
# install vscode in a FHS environment to allow extensions with prebuilt binaries
package = pkgs.vscode.fhs;
# package = pkgs.vscode.fhs;
# profiles = {
# default = {
@ -18,9 +18,9 @@
ms-python.isort
ms-python.debugpy
ms-python.vscode-pylance
ms-toolsai.jupyter
ms-toolsai.vscode-jupyter-slideshow
ms-toolsai.jupyter-renderers
# ms-toolsai.jupyter
# ms-toolsai.vscode-jupyter-slideshow
# ms-toolsai.jupyter-renderers
# Nix language
jnoortheen.nix-ide
@ -28,11 +28,17 @@
# typst
myriad-dreamin.tinymist
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "jupyter";
publisher = "ms-toolsai";
version = "2025.3.2025032101";
sha256 = "sha256-s2qEUl9J6EOije6MasZOnHErYs3NYXBqLSfMT03vEH0=";
}
{
name = "jupyter-hub";
publisher = "ms-toolsai";
version = "2024.10.1002831100";
sha256 = "sha256-3YF91Wgw5je040xPpLHPdxQIEAetpmDz6La7bw2JM+g=";
sha256 = "sha256-5IRczwXbYkDdYEOXvQnnH+HJNLvsRsrZ6fnoVCveqrs=";
}
];

View File

@ -2,6 +2,6 @@
{
home.packages = [
# pdf viewer
pkgs.evince
pkgs.papers
];
}

View File

@ -1,10 +1,35 @@
{inputs, pkgs, ...}:
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
options = {
nix-config.hypr.internal-screen.resolution = lib.mkOption { type = lib.types.str; };
nix-config.hypr.internal-screen.scale = lib.mkOption { type = lib.types.str; };
nix-config.hypr.browser = lib.mkOption {
type = lib.types.str;
default = "firefox";
description = "The browser to use in Hyprland.";
};
nix-config.hypr.launcher-cmd = lib.mkOption {
type = lib.types.str;
default = "wofi --show drun -n";
description = "The command to launch the application launcher in Hyprland.";
};
nix-config.hypr.ide = lib.mkOption {
type = lib.types.str;
default = "code";
description = "The IDE to use in Hyprland.";
};
};
config = {
home.packages = [
pkgs.hyprshot
pkgs.nautilus
pkgs.gnome-control-center
pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth
pkgs.brightnessctl
pkgs.cliphist
pkgs.wl-clipboard
@ -21,17 +46,14 @@
systemd.enable = true;
settings = {
"$mod" = "SUPER";
"$browser" = "firefox";
"$launcher-cmd" = "wofi --show drun -n";
"$ide" = "code";
# Global bindings
bind = [
# Launch applications
"$mod, space, exec, $launcher-cmd"
"$mod, space, exec, ${cfg.launcher-cmd}"
"$mod, return, exec, kitty"
"$mod, b, exec, $browser"
"$mod, s, exec, $ide"
"$mod, b, exec, ${cfg.browser}"
"$mod, s, exec, ${cfg.ide}"
"$mod, e, exec, nautilus"
# Lock screen
@ -87,7 +109,6 @@
"$mod, KP_Subtract, resizeactive, -2% -2%"
"$mod, PLUS, resizeactive, 2% 2%"
"$mod, KP_Add, resizeactive, 2% 2%"
];
# lock-screen bindings
@ -191,7 +212,9 @@
};
monitor = [
"eDP-1, 3840x2160, 0x0, 1.666667" # the internal laptop monitor
# the internal monitor, always at the "center"
"eDP-1, ${cfg.internal-screen.resolution}, 0x0, ${cfg.internal-screen.scale}"
# Samsung monitors at irchel (matching the description)
# "desc:Samsung Electric Company LS27D80xU HK7X800803, 3840x2160, auto-up, 1.8"
"desc:Samsung Electric Company LS27D80xU HNAX600169, 2560x1440@59.95, auto-up, 1"
@ -221,8 +244,8 @@
# Touch gestures
pkgs.hyprlandPlugins.hyprgrass
];
};
services.swaync.enable = true;
};
}

View File

@ -1,4 +1,7 @@
{inputs, pkgs, ...}:
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.style;
in
{
# required to autoload fonts from packages installed via Home Manager
fonts.fontconfig.enable = true;
@ -14,14 +17,16 @@
settings = {
mainBar = {
margin-top = 2;
margin-bottom = 2;
margin-left = 5;
margin-right = 5;
layer = "top";
position = "top";
spacing = 5;
margin-top = 5;
# margin-bottom = 2;
# margin-left = 5;
# margin-right = 5;
# margin between the modules
spacing = 2;
modules-left = [
"hyprland/workspaces"
@ -36,8 +41,8 @@
modules-right = [
"tray"
"privacy"
"wireplumber"
"network"
"wireplumber"
"battery"
"backlight"
"idle_inhibitor"
@ -150,18 +155,29 @@
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "sleep 0.1 && task-waybar";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"network" = {
format = "󰤭";
format-wifi = "{icon} {essid}";
format-ethernet = " {ipaddr}";
format-wifi = "{icon}";
format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ];
format-ethernet = "󰊗 {ipaddr}/{cidr}";
format-disconnected = "";
tooltip-format = "󰊗 {ifname} via {gwaddr}";
tooltip-format-wifi = "SSID: {essid}({signalStrength}%), {frequency} MHz\nInterface: {ifname}\nIP: {ipaddr}\nGW: {gwaddr}\n\n<span color='#a6da95'>{bandwidthUpBits}</span>\t<span color='#ee99a0'>{bandwidthDownBits}</span>\t<span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>";
tooltip-format-ethernet = "{ifname} ";
format-disconnected = "󰤭";
tooltip-format = " {ifname} via {gwaddr}";
# TODO - don't escape the strings in the tooltip
tooltip-format-wifi = ''
󰤨 {essid}({signalStrength}%), {frequency} GHz\nInterface: {ifname}
IP: {ipaddr} GW: {gwaddr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-ethernet = ''
{ifname} - {ipaddr}/{cidr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-disconnected = "Disconnected";
on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi";
};
@ -192,22 +208,20 @@
style = ''
* {
font-family: "FiraCode Nerd Font";
font-family: "${cfg.monospaceFont}";
font-weight: bold;
font-size: 20px;
font-size: ${builtins.toString (cfg.fontSizes.desktop + 7)}px;
}
window#waybar {
background-color: transparent;
}
.module {
background: rgba(0, 0, 0, 0.6);
color: white;
border-radius: 7px;
padding: 5px 5px 5px 5px;
margin: 5px 0;
}
box.module button:hover {
box-shadow: inset 0 -3px #ffffff;

View File

@ -1,6 +1,6 @@
{pkgs, lib, ...}:
{pkgs, lib, config, ...}:
let
stylix = import ./stylix.nix { inherit pkgs; };
cfg = config.nix-config.style;
in
{
programs.kitty = {
@ -35,12 +35,12 @@ in
# color15 = stylix.stylix.base16Scheme.base0F;
# also reuse the background opacity by stylix
background_opacity = stylix.stylix.opacity.terminal;
background_opacity = cfg.terminalOpacity;
background = "#000000";
font_family = stylix.stylix.fonts.monospace.name;
font_size = stylix.stylix.fonts.sizes.terminal;
font_family = cfg.monospaceFont;
font_size = cfg.fontSizes.terminal;
confirm_os_window_close = 0;
enable_audio_bell = false;
cursor_trail = 3;

View File

@ -1,5 +1,55 @@
{pkgs, ...}:
{pkgs, config, lib, ...}:
let
cfg = config.nix-config.style;
in
{
options.nix-config.style = {
cursor = {
size = lib.mkOption {
type = lib.types.int;
default = 35;
description = "Size of the cursor in pixels.";
};
};
fontSizes = {
applications = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for applications.";
};
desktop = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for desktop icons.";
};
popups = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for popups.";
};
terminal = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for terminal.";
};
};
terminalOpacity = lib.mkOption {
type = lib.types.float;
default = 0.8;
description = "Terminal default opacity";
};
monospaceFont = lib.mkOption {
type = lib.types.str;
default = "FiraCode Nerd Font Mono";
description = "Monospace font. Needs to be installed.";
};
};
config = {
stylix = {
# Stylix is already enabled since the system is configured to use it
# enable = true;
@ -9,7 +59,7 @@
cursor = {
package = pkgs.apple-cursor;
name = "macOS";
size = 35;
size = cfg.cursor.size;
};
iconTheme = {
@ -35,7 +85,7 @@
monospace = {
package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; };
name = "FiraCode Nerd Font Mono";
name = cfg.monospaceFont;
};
emoji = {
@ -44,10 +94,10 @@
};
sizes = {
applications = 12;
desktop = 12;
popups = 12;
terminal = 12;
applications = cfg.fontSizes.applications;
desktop = cfg.fontSizes.desktop;
popups = cfg.fontSizes.popups;
terminal = cfg.fontSizes.terminal;
};
};
@ -55,7 +105,7 @@
applications = 1.0;
desktop = 1.0;
popups = 0.9;
terminal = 0.8;
terminal = cfg.terminalOpacity;
};
};
@ -93,4 +143,5 @@
# kitty.enable = true;
};
};
}

View File

@ -1,8 +1,8 @@
{ config, pkgs, lib, ... }:
let
stylix = import ./stylix.nix { inherit pkgs; };
in {
cfg = config.nix-config.style;
in
{
home.packages = with pkgs; [ wofi-emoji ];
@ -52,14 +52,14 @@ in {
style = ''
* {
font-family: ${stylix.stylix.fonts.sansSerif.name};
font-size: ${builtins.toString (stylix.stylix.fonts.sizes.applications + 10)}px;
color: ${stylix.stylix.base16Scheme.base04};
font-family: ${cfg.monospaceFont};
font-size: ${builtins.toString (cfg.fontSizes.desktop + 8)}px;
color: white;
background: transparent;
}
#window {
background: rgba(41, 46, 66, 0.5);
background: rgba(1, 1, 1, 0.5);
margin: auto;
padding: 10px;
}

View File

@ -10,17 +10,17 @@
];
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Name = "Nixtre";
ControllerMode = "dual";
FastConnectable = "true";
Experimental = "true";
};
Policy = {
AutoEnable = "true";
};
};
# powerOnBoot = true;
# settings = {
# General = {
# Name = "Nixtre";
# ControllerMode = "dual";
# FastConnectable = "true";
# Experimental = "true";
# };
# Policy = {
# AutoEnable = "true";
# };
# };
};
}

View File

@ -4,7 +4,13 @@
pkgs,
...
}:
let
cfg = config.nix-config;
in
{
config = {
# Use hyprland as the main desktop environment but use gdm as desktop manager
programs.hyprland = {
enable = true;
@ -24,4 +30,6 @@
security.pam.services.gdm.enableGnomeKeyring = true;
};
}

View File

@ -0,0 +1,17 @@
{
config,
pkgs,
...
}:
{
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
# location at install time. Since the drive is a USB drive this is expcected to change on each device
boot.loader.grub.device = "/dev/sdb";
boot.loader.grub.efiInstallAsRemovable = true;
boot.loader.systemd-boot.enable = false;
boot.loader.efi.canTouchEfiVariables = false;
boot.tmp.useTmpfs = true;
}

View File

@ -1,26 +1,5 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
imports = [
../modules/home-manager/browser.nix
../modules/home-manager/code.nix
../modules/home-manager/dev.nix
../modules/home-manager/documents.nix
../modules/home-manager/fish.nix
../modules/home-manager/flatpaks.nix
../modules/home-manager/hypr
../modules/home-manager/keepassxc.nix
../modules/home-manager/kitty.nix
../modules/home-manager/kubectl.nix
../modules/home-manager/obsidian.nix
../modules/home-manager/owncloud-client.nix
../modules/home-manager/ssh.nix
../modules/home-manager/stylix.nix
../modules/home-manager/thunderbird.nix
../modules/home-manager/wofi.nix
../modules/home-manager/xdg-portals.nix
];
## Home Manager configuration
home.stateVersion = "24.05";
# Let Home Manager install and manage itself.

View File

@ -0,0 +1,38 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
hypr = {
internal-screen = {
resolution = "3840x2160";
scale = "1.666667";
};
};
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/documents.nix
../../modules/home-manager/fish.nix
../../modules/home-manager/flatpaks.nix
../../modules/home-manager/hypr
../../modules/home-manager/keepassxc.nix
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/wofi.nix
../../modules/home-manager/xdg-portals.nix
];
}

View File

@ -0,0 +1,38 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
hypr = {
internal-screen = {
resolution = "2880x1800@90.00100";
scale = "1.666667";
};
};
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/documents.nix
../../modules/home-manager/fish.nix
../../modules/home-manager/flatpaks.nix
../../modules/home-manager/hypr
../../modules/home-manager/keepassxc.nix
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/wofi.nix
../../modules/home-manager/xdg-portals.nix
];
}