summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKleidi Bujari <mail@4kb.net>2026-10-03 19:56:13 -0700
committerKleidi Bujari <mail@4kb.net>2026-10-03 20:54:54 -0700
commit16918d62b34b7e4d7817837057b88acb44e4f63c (patch)
tree60138c234e8fe2c21946938169d0704edb300f16
parent7b5670b47ad1433202b19db7c96ae9ac69d92fbb (diff)
downloaddepot-16918d62b34b7e4d7817837057b88acb44e4f63c.tar.gz
depot-16918d62b34b7e4d7817837057b88acb44e4f63c.tar.bz2
depot-16918d62b34b7e4d7817837057b88acb44e4f63c.zip
enable flake-less machine builds
-rw-r--r--default.nix10
-rw-r--r--machines/t1.nix37
-rw-r--r--modules/desktop.nix489
-rw-r--r--modules/users.nix29
-rw-r--r--modules/xnet/default.nix6
5 files changed, 298 insertions, 273 deletions
diff --git a/default.nix b/default.nix
index 3c167c9..dafe54f 100644
--- a/default.nix
+++ b/default.nix
@@ -7,6 +7,11 @@ let
inherit (lock.nodes.nixpkgs.locked) rev;
inherit (lock.nodes.nixpkgs.original) ref;
};
+
+ disko = builtins.fetchTarball {
+ url = "https://github.com/nix-community/disko/archibe/${lock.nodes.disko.locked.rev}tar.gz";
+ sha256 = lock.nodes.disko.locked.narHash;
+ };
in
{
pkgs ? import defaultNixpkgs { },
@@ -64,8 +69,11 @@ let
entry.path
nixosModules.xnet
nixosModules.disk
- # nixosModules.network
+ nixosModules.desktop
+ nixosModules.network
nixosModules.sshd
+ nixosModules.users
+ ("${disko}/module.nix")
];
};
in
diff --git a/machines/t1.nix b/machines/t1.nix
index b443da5..d8d749b 100644
--- a/machines/t1.nix
+++ b/machines/t1.nix
@@ -1,22 +1,6 @@
-{
- flake,
- pkgs,
- perSystem,
- ...
-}:
+{ pkgs, ... }:
-let
- inherit (import flake.outputs.nixosModules.users { inherit perSystem pkgs; })
- kle
- ;
-in
{
- imports = [
- flake.outputs.nixosModules.disk
- flake.outputs.nixosModules.desktop
- flake.outputs.nixosModules.network
- ];
-
hardware = {
cpu.amd.updateMicrocode = true;
enableRedistributableFirmware = true;
@@ -31,9 +15,17 @@ in
};
};
- nixpkgs.hostPlatform = "x86_64-linux";
+ depot = {
+ desktop.enable = true;
+ users.kle.enable = true;
+ net = {
+ v6Token = "::beef";
+ sshd.enable = true;
+ sshd.publish = true;
+ };
+ };
- users.users.kle = kle;
+ nixpkgs.hostPlatform = "x86_64-linux";
xnet = {
disk = {
@@ -42,12 +34,6 @@ in
};
};
- depot.net = {
- v6Token = "::beef";
- sshd.enable = true;
- sshd.publish = true;
- };
-
# depot.disk = {
# enable = true;
# device = "/dev/nvme0n1";
@@ -80,7 +66,6 @@ in
environment.shellAliases.b = "${pkgs.ddcutil}/bin/ddcutil setvcp 10";
boot.kernelModules = [ "i2c-dev" ];
-
environment.systemPackages = with pkgs; [
ddcutil
prismlauncher
diff --git a/modules/desktop.nix b/modules/desktop.nix
index 894a7db..747c302 100644
--- a/modules/desktop.nix
+++ b/modules/desktop.nix
@@ -1,283 +1,298 @@
-{ lib, pkgs, ... }:
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
let
- inherit (lib) mkDefault;
+ cfg = config.depot.desktop;
+
+ inherit (lib) mkIf mkDefault mkEnableOption;
inherit (builtins) listToAttrs;
in
{
- environment.systemPackages = with pkgs; [
- audacious
- brightnessctl
- foot
- fuzzel
- imv
- man-pages
- man-pages-posix
- mpv
- playerctl
- pop-icon-theme
- pwvucontrol
- swaybg
- swayidle
- swaylock
- tigervnc
- wl-clipboard
- xeyes
- xwayland-satellite
- zathura
+ options.depot.desktop.enable = mkEnableOption "depot desktop";
- # Spell checking
- aspell
- aspellDicts.en
- aspellDicts.en-science
- aspellDicts.en-computers
+ config = mkIf cfg.enable {
+ environment.systemPackages = with pkgs; [
+ audacious
+ brightnessctl
+ foot
+ fuzzel
+ imv
+ man-pages
+ man-pages-posix
+ mpv
+ playerctl
+ pop-icon-theme
+ pwvucontrol
+ swaybg
+ swayidle
+ swaylock
+ tigervnc
+ wl-clipboard
+ xeyes
+ xwayland-satellite
+ zathura
- hunspell
- hunspellDicts.en-us
- ];
+ # Spell checking
+ aspell
+ aspellDicts.en
+ aspellDicts.en-science
+ aspellDicts.en-computers
- documentation = {
- dev.enable = true;
- doc.enable = true;
- info.enable = true;
- man.enable = true;
- };
+ hunspell
+ hunspellDicts.en-us
+ ];
- security.rtkit.enable = true;
- services.pipewire = {
- enable = true;
- pulse.enable = true;
- alsa.enable = true;
- };
+ documentation = {
+ dev.enable = true;
+ doc.enable = true;
+ info.enable = true;
+ man.enable = true;
+ };
- services.emacs = {
- enable = true;
- defaultEditor = true;
- package = with pkgs; (emacsPackagesFor emacs).emacsWithPackages
- (epkgs: [ epkgs.mu4e epkgs.treesit-grammars.with-all-grammars ]);
- };
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ pulse.enable = true;
+ alsa.enable = true;
+ };
- # Build nix derivations on disk rather than in /tmp which is mounted
- # in RAM, otherwise large closures fail to build due to lack of
- # space. Since desktops are used as dev machines, this option lives
- # here rather than on a more general module.
- systemd.services.nix-daemon.environment.TMPDIR = "/nix/tmp";
+ services.emacs = {
+ enable = true;
+ defaultEditor = true;
+ package =
+ with pkgs;
+ (emacsPackagesFor emacs).emacsWithPackages (epkgs: [
+ epkgs.mu4e
+ epkgs.treesit-grammars.with-all-grammars
+ ]);
+ };
- # Make sure the directory for evaluating large closures exists for
- # the nix daemon.
- systemd.tmpfiles.rules = [ "d /nix/tmp 755 root root - -" ];
+ # Build nix derivations on disk rather than in /tmp which is mounted
+ # in RAM, otherwise large closures fail to build due to lack of
+ # space. Since desktops are used as dev machines, this option lives
+ # here rather than on a more general module.
+ systemd.services.nix-daemon.environment.TMPDIR = "/nix/tmp";
- systemd.packages = with pkgs; [ mako ];
- systemd.user.services =
- let
- afterGraphical = ExecStart: {
- enable = true;
- after = [ "graphical-session.target" ];
- partOf = [ "graphical-session.target" ];
- wantedBy = [ "graphical-session.target" ];
- serviceConfig = {
- inherit ExecStart;
- Type = "simple";
+ # Make sure the directory for evaluating large closures exists for
+ # the nix daemon.
+ systemd.tmpfiles.rules = [ "d /nix/tmp 755 root root - -" ];
+
+ systemd.packages = with pkgs; [ mako ];
+ systemd.user.services =
+ let
+ afterGraphical = ExecStart: {
+ enable = true;
+ after = [ "graphical-session.target" ];
+ partOf = [ "graphical-session.target" ];
+ wantedBy = [ "graphical-session.target" ];
+ serviceConfig = {
+ inherit ExecStart;
+ Type = "simple";
+ };
};
- };
- in
- {
- udiskie = afterGraphical "${pkgs.udiskie}/bin/udiskie";
- swayidle =
- let
- swaylock = lib.concatStringsSep " " [
- "${pkgs.swaylock}/bin/swaylock"
- "--color 2b3328"
- "--indicator-caps-lock"
- "--ignore-empty-password"
- "--daemonize"
- ];
- in
- afterGraphical (
- pkgs.writeShellScript "start-swayidle" ''
- ${pkgs.swayidle}/bin/swayidle -w \
- timeout 601 '${pkgs.niri}/bin/niri msg action power-off-monitors' \
- timeout 600 '${swaylock}' \
- before-sleep '${swaylock}'
- ''
- );
+ in
+ {
+ udiskie = afterGraphical "${pkgs.udiskie}/bin/udiskie";
+ swayidle =
+ let
+ swaylock = lib.concatStringsSep " " [
+ "${pkgs.swaylock}/bin/swaylock"
+ "--color 2b3328"
+ "--indicator-caps-lock"
+ "--ignore-empty-password"
+ "--daemonize"
+ ];
+ in
+ afterGraphical (
+ pkgs.writeShellScript "start-swayidle" ''
+ ${pkgs.swayidle}/bin/swayidle -w \
+ timeout 601 '${pkgs.niri}/bin/niri msg action power-off-monitors' \
+ timeout 600 '${swaylock}' \
+ before-sleep '${swaylock}'
+ ''
+ );
- waybar = {
- partOf = [ "graphical-session.target" ];
- wantedBy = [ "graphical-session.target" ];
- after = [ "graphical-session.target" ];
+ waybar = {
+ partOf = [ "graphical-session.target" ];
+ wantedBy = [ "graphical-session.target" ];
+ after = [ "graphical-session.target" ];
- path = with pkgs; [
- pwvucontrol
- ];
+ path = with pkgs; [
+ pwvucontrol
+ ];
- serviceConfig = {
- Type = "exec";
- ExecStart = "${pkgs.waybar}/bin/waybar";
- ExecReload = "kill -SIGUSR2 $MAINPID";
- Restart = "on-failure";
+ serviceConfig = {
+ Type = "exec";
+ ExecStart = "${pkgs.waybar}/bin/waybar";
+ ExecReload = "kill -SIGUSR2 $MAINPID";
+ Restart = "on-failure";
+ };
};
};
- };
- qt = {
- enable = true;
- style = "adwaita-dark";
- platformTheme = "gnome";
- };
+ qt = {
+ enable = true;
+ style = "adwaita-dark";
+ platformTheme = "gnome";
+ };
- fonts = {
- # Expose system fonts in case something non-standard needs them
- fontDir.enable = true;
- packages = with pkgs; [
- ibm-plex
- iosevka
- nerd-fonts.symbols-only
- ];
+ fonts = {
+ # Expose system fonts in case something non-standard needs them
+ fontDir.enable = true;
+ packages = with pkgs; [
+ ibm-plex
+ iosevka
+ nerd-fonts.symbols-only
+ ];
- fontconfig.defaultFonts = {
- serif = [ "IBM Plex Serif" ];
- sansSerif = [ "IBM Plex Sans" ];
- monospace = [ "IBM Plex Mono" ];
+ fontconfig.defaultFonts = {
+ serif = [ "IBM Plex Serif" ];
+ sansSerif = [ "IBM Plex Sans" ];
+ monospace = [ "IBM Plex Mono" ];
+ };
};
- };
-
- environment.etc."xdg/user-dirs.defaults".text = ''
- DOWNLOAD=/tmp/downloads
- '';
- environment.sessionVariables = {
- MOZ_ENABLE_WAYLAND = 1;
- MOZ_USE_XINPUT2 = 1;
- MOZ_WEBRENDER = 1;
- QT_QPA_PLATFORM = "wayland;xcb";
- };
+ environment.etc."xdg/user-dirs.defaults".text = ''
+ DOWNLOAD=/tmp/downloads
+ '';
- programs = {
- niri.enable = true;
- direnv.enable = true;
- fish = {
- enable = true;
- interactiveShellInit = ''
- # disable greeting
- set fish_greeting
- '';
+ environment.sessionVariables = {
+ MOZ_ENABLE_WAYLAND = 1;
+ MOZ_USE_XINPUT2 = 1;
+ MOZ_WEBRENDER = 1;
+ QT_QPA_PLATFORM = "wayland;xcb";
};
- # GTK settings
- dconf = {
- enable = true;
- profiles.user.databases = [
- {
- lockAll = true;
- settings = {
- "org/gnome/desktop/interface" = {
- color-scheme = "prefer-dark";
- gtk-font-name = "Sans Serif 10";
- icon-theme = "Pop";
- theme-name = "Adwaita";
+ programs = {
+ niri.enable = true;
+ direnv.enable = true;
+ fish = {
+ enable = true;
+ interactiveShellInit = ''
+ # disable greeting
+ set fish_greeting
+ '';
+ };
+
+ # GTK settings
+ dconf = {
+ enable = true;
+ profiles.user.databases = [
+ {
+ lockAll = true;
+ settings = {
+ "org/gnome/desktop/interface" = {
+ color-scheme = "prefer-dark";
+ gtk-font-name = "Sans Serif 10";
+ icon-theme = "Pop";
+ theme-name = "Adwaita";
+ };
};
- };
- }
- ];
+ }
+ ];
+ };
};
- };
- hardware.bluetooth = {
- enable = true;
- powerOnBoot = true;
- settings = {
- General = {
- Experimental = true;
- };
- Policy = {
- AutoEnable = true;
+ hardware.bluetooth = {
+ enable = true;
+ powerOnBoot = true;
+ settings = {
+ General = {
+ Experimental = true;
+ };
+ Policy = {
+ AutoEnable = true;
+ };
};
};
- };
- services.blueman.enable = true;
+ services.blueman.enable = true;
- # Helper for managing dotfiles
- environment.shellAliases.dots = "git --git-dir=$HOME/.local/cfg/ --work-tree=$HOME";
+ # Helper for managing dotfiles
+ environment.shellAliases.dots = "git --git-dir=$HOME/.local/cfg/ --work-tree=$HOME";
- # Enable modifying keyboard firmware
- hardware.keyboard.qmk.enable = true;
+ # Enable modifying keyboard firmware
+ hardware.keyboard.qmk.enable = true;
- security.polkit.enable = true;
+ security.polkit.enable = true;
- services = {
- gnome.gnome-keyring.enable = true;
- upower.enable = true;
- pcscd.enable = true;
- udev.packages = with pkgs; [ yubikey-personalization ];
- udisks2 = {
- enable = true;
- mountOnMedia = true;
+ services = {
+ gnome.gnome-keyring.enable = true;
+ upower.enable = true;
+ pcscd.enable = true;
+ udev.packages = with pkgs; [ yubikey-personalization ];
+ udisks2 = {
+ enable = true;
+ mountOnMedia = true;
+ };
};
- };
- programs.firefox = {
- enable = true;
- preferences = {
- # Enable hardware transcoding
- "media.ffmpeg.vaapi.enabled" = true;
+ programs.firefox = {
+ enable = true;
+ preferences = {
+ # Enable hardware transcoding
+ "media.ffmpeg.vaapi.enabled" = true;
- # Disable controlling media with keyboard
- "media.hardwaremediakeys.enabled" = false;
- # Enable legacy compact mode
- "browser.compactmode.show" = true;
- "browser.uidensity" = 1;
+ # Disable controlling media with keyboard
+ "media.hardwaremediakeys.enabled" = false;
+ # Enable legacy compact mode
+ "browser.compactmode.show" = true;
+ "browser.uidensity" = 1;
- # Disable ctrl+q closing browser
- "browser.quitShortcut.disabled" = true;
+ # Disable ctrl+q closing browser
+ "browser.quitShortcut.disabled" = true;
- # Hardcode theme to dark mode
- "ui.systemUsesDarkTheme" = 1;
- };
- policies = {
- DefaultDownloadDirectory = "/tmp/firefox";
- DisableTelemetry = true;
- DisableFirefoxStudies = true;
- EnableTrackingProtection = {
- Value = true;
- Locked = true;
- Cryptomining = true;
- Fingerprinting = true;
+ # Hardcode theme to dark mode
+ "ui.systemUsesDarkTheme" = 1;
};
- DisableAccounts = true;
- DisableFirefoxAccounts = true;
- DisableFirefoxScreenshots = true;
- DisablePocket = true;
- DisplayBookmarksToolbar = "never";
- DisplayMenuBar = "default-off";
- DontCheckDefaultBrowser = true;
- Homepage = {
- URL = "about:blank";
- StartPage = "homepage";
- };
- HttpsOnlyMode = "enabled";
- DNSOverHTTPS = false;
- NewTabPage = false;
- OfferToSaveLogins = false;
- PasswordManagerEnabled = false;
- SearchBar = "unified";
- SearchEngines.Default = "DuckDuckGo";
- SearchSuggestEnabled = false;
- ExtensionSettings =
- let
- extension = shortId: uuid: {
- name = uuid;
- value = {
- install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
- installation_mode = "force_installed";
+ policies = {
+ DefaultDownloadDirectory = "/tmp/firefox";
+ DisableTelemetry = true;
+ DisableFirefoxStudies = true;
+ EnableTrackingProtection = {
+ Value = true;
+ Locked = true;
+ Cryptomining = true;
+ Fingerprinting = true;
+ };
+ DisableAccounts = true;
+ DisableFirefoxAccounts = true;
+ DisableFirefoxScreenshots = true;
+ DisablePocket = true;
+ DisplayBookmarksToolbar = "never";
+ DisplayMenuBar = "default-off";
+ DontCheckDefaultBrowser = true;
+ Homepage = {
+ URL = "about:blank";
+ StartPage = "homepage";
+ };
+ HttpsOnlyMode = "enabled";
+ DNSOverHTTPS = false;
+ NewTabPage = false;
+ OfferToSaveLogins = false;
+ PasswordManagerEnabled = false;
+ SearchBar = "unified";
+ SearchEngines.Default = "DuckDuckGo";
+ SearchSuggestEnabled = false;
+ ExtensionSettings =
+ let
+ extension = shortId: uuid: {
+ name = uuid;
+ value = {
+ install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
+ installation_mode = "force_installed";
+ };
};
- };
- in
- listToAttrs [
- (extension "ublock-origin" "uBlock0@raymondhill.net")
- (extension "bitwarden-password-manager" "{446900e4-71c2-419f-a6a7-df9c091e268b}")
- (extension "darkreader" "addon@darkreader.org")
- ];
+ in
+ listToAttrs [
+ (extension "ublock-origin" "uBlock0@raymondhill.net")
+ (extension "bitwarden-password-manager" "{446900e4-71c2-419f-a6a7-df9c091e268b}")
+ (extension "darkreader" "addon@darkreader.org")
+ ];
+ };
};
};
}
diff --git a/modules/users.nix b/modules/users.nix
index e21c085..d3e7cb4 100644
--- a/modules/users.nix
+++ b/modules/users.nix
@@ -1,7 +1,17 @@
-{ pkgs, ... }:
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
let
+ cfg = config.depot.users;
+
inherit (builtins)
- attrValues;
+ attrValues
+ ;
+
+ inherit (lib) mkIf mkEnableOption;
keys = {
t480 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEOw8YEbHsKy38JHp9W1wcxxZgWCDgnabOXccZUN5ddd";
@@ -9,13 +19,23 @@ let
};
in
{
- kle = {
+ options.depot.users.kle.enable = mkEnableOption "kle user";
+
+ config.users.users.kle = mkIf cfg.kle.enable {
initialHashedPassword = "$6$R4dDhaftX.vapGMd$.An36hlp3DXfkIC7bPZ0MDPo6Zvpk8JRrhy2LES.lZZj6JDa74oJkcMW3DCsIySvLJxOPXSShos0TpgJ/w0fH/";
isNormalUser = true;
shell = pkgs.fish;
home = "/persist/usr/kle";
createHome = true;
- extraGroups = [ "wheel" "users" "networkmanager" "video" "kvm" "i2c" "dialout" ];
+ extraGroups = [
+ "wheel"
+ "users"
+ "networkmanager"
+ "video"
+ "kvm"
+ "i2c"
+ "dialout"
+ ];
packages = with pkgs; [
btop
curl
@@ -29,6 +49,7 @@ in
rsync
sshfs
tree
+ watchman
zip
# passwords
diff --git a/modules/xnet/default.nix b/modules/xnet/default.nix
index 8885db5..67bbbe5 100644
--- a/modules/xnet/default.nix
+++ b/modules/xnet/default.nix
@@ -2,7 +2,6 @@
pkgs,
lib,
config,
- flake,
...
}:
let
@@ -63,10 +62,7 @@ in
automatic = true;
options = mkDefault "--delete-older-than 30d";
};
- registry = {
- nixpkgs.flake = pkgs.path;
- depot.flake = flake;
- };
+ # registry.nixpkgs.flake = pkgs.path;
};
documentation = {