Compare commits

..

4 commits

Author SHA1 Message Date
Leon Schwarzäugl
64e6a9c159
fix[work,client]: get home-manager working on dgx
Some checks failed
Flake check / Check flake (push) Has been cancelled
2025-10-31 15:04:59 +01:00
Leon Schwarzäugl
c8a49d4f47
feat[work]: improve git-replace 2025-10-31 15:03:52 +01:00
Leon Schwarzäugl
ed9008112b
feat[work]: improve git-replace 2025-10-31 15:02:49 +01:00
Leon Schwarzäugl
ae98f0d5df
feat[work]: mako: no disturb during presentations 2025-10-31 15:01:56 +01:00
21 changed files with 1098 additions and 897 deletions

View file

@ -943,7 +943,7 @@ The rest of the outputs either define or help define the actual configurations:
modules = [ modules = [
inputs.niri-flake.homeModules.niri inputs.niri-flake.homeModules.niri
inputs.nix-index-database.homeModules.nix-index inputs.nix-index-database.homeModules.nix-index
inputs.sops-nix.homeManagerModules.sops # inputs.sops-nix.homeManagerModules.sops
inputs.spicetify-nix.homeManagerModules.default inputs.spicetify-nix.homeManagerModules.default
inputs.swarsel-nix.homeModules.default inputs.swarsel-nix.homeModules.default
"${self}/hosts/${type}/${configName}" "${self}/hosts/${type}/${configName}"
@ -1249,9 +1249,11 @@ Lastly, in the =perSystem= attribute set, we see that it is actually passed some
}; };
}; };
devshells.default = { devshells.default = let
nix-version = "2_30";
in {
packages = [ packages = [
(builtins.trace "alarm: we pinned nix_2_28 because of https://github.com/shlevy/nix-plugins/issues/20" pkgs.nixVersions.nix_2_28) # Always use the nix version from this flake's nixpkgs version, so that nix-plugins (below) doesn't fail because of different nix versions. (builtins.trace "alarm: pinned nix_${nix-version}" pkgs.nixVersions."nix_${nix-version}")
pkgs.git pkgs.git
pkgs.just pkgs.just
pkgs.age pkgs.age
@ -1287,12 +1289,12 @@ Lastly, in the =perSystem= attribute set, we see that it is actually passed some
{ {
package = pkgs.nix-output-monitor; package = pkgs.nix-output-monitor;
help = "Nix Output Monitor (a drop-in alternative for `nix` which shows a build graph)"; help = "Nix Output Monitor (a drop-in alternative for `nix` which shows a build graph)";
name = "nom"; name = "nom \"$@\"";
} }
{ {
name = "hm"; name = "hm";
help = "Manage home-manager config"; help = "Manage home-manager config";
command = "home-manager"; command = "home-manager \"$@\"";
} }
{ {
name = "fmt"; name = "fmt";
@ -1317,7 +1319,7 @@ Lastly, in the =perSystem= attribute set, we see that it is actually passed some
{ {
name = "bld"; name = "bld";
help = "Build a number of configurations"; help = "Build a number of configurations";
command = "swarel-build \"$@\""; command = "swarsel-build \"$@\"";
} }
{ {
name = "c"; name = "c";
@ -1328,13 +1330,17 @@ Lastly, in the =perSystem= attribute set, we see that it is actually passed some
devshell.startup.pre-commit-install.text = "pre-commit install"; devshell.startup.pre-commit-install.text = "pre-commit install";
env = [ env = let
nix-plugins = pkgs.nix-plugins.override {
nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
};
in [
{ {
# Additionally configure nix-plugins with our extra builtins file. # Additionally configure nix-plugins with our extra builtins file.
# We need this for our repo secrets. # We need this for our repo secrets.
name = "NIX_CONFIG"; name = "NIX_CONFIG";
value = '' value = ''
plugin-files = ${pkgs.nix-plugins}/lib/nix/plugins plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
''; '';
} }
@ -2621,8 +2627,8 @@ My phone. I use only a minimal config for remote debugging here.
{ {
imports = [ imports = [
inputs.stylix.homeManagerModules.stylix inputs.stylix.homeModules.stylix
inputs.sops-nix.homeManagerModules.sops # inputs.sops-nix.homeManagerModules.sops
inputs.nix-index-database.homeModules.nix-index inputs.nix-index-database.homeModules.nix-index
"${self}/modules/home" "${self}/modules/home"
"${self}/modules/nixos/common/pii.nix" "${self}/modules/nixos/common/pii.nix"
@ -4195,8 +4201,12 @@ A breakdown of the flags being set:
sopsFile = "${config.swarselsystems.flakePath}/secrets/general/secrets.yaml"; sopsFile = "${config.swarselsystems.flakePath}/secrets/general/secrets.yaml";
}; };
nix = { nix =
package = pkgs.nixVersions.nix_2_28; let
nix-version = "2_30";
in
{
package = pkgs.nixVersions."nix_${nix-version}";
settings = { settings = {
experimental-features = [ experimental-features = [
"nix-command" "nix-command"
@ -4213,11 +4223,22 @@ A breakdown of the flags being set:
# '' + lib.optionalString (!minimal) '' # '' + lib.optionalString (!minimal) ''
# !include ${config.sops.secrets.github-api-token.path} # !include ${config.sops.secrets.github-api-token.path}
# ''; # '';
extraOptions = '' # extraOptions = ''
plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: { # plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: {
buildInputs = [config.nix.package pkgs.boost]; # buildInputs = [config.nix.package pkgs.boost];
patches = o.patches or []; # patches = o.patches or [];
})}/lib/nix/plugins # })}/lib/nix/plugins
# extra-builtins-file = ${self + /nix/extra-builtins.nix}
# '';
extraOptions =
let
nix-plugins = pkgs.nix-plugins.override {
nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
};
in
''
plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
'' + lib.optionalString (!minimal) '' '' + lib.optionalString (!minimal) ''
!include ${config.sops.secrets.github-api-token.path} !include ${config.sops.secrets.github-api-token.path}
@ -5767,12 +5788,13 @@ This section houses the greetd related settings. I do not really want to use a d
settings = { settings = {
# initial_session.command = "sway"; # initial_session.command = "sway";
initial_session.command = "uwsm start -- sway-uwsm.desktop"; initial_session.command = "uwsm start -- sway-uwsm.desktop";
# --cmd sway
default_session.command = '' default_session.command = ''
${pkgs.tuigreet}/bin/tuigreet \ ${pkgs.tuigreet}/bin/tuigreet \
--time \ --time \
--asterisks \ --asterisks \
--user-menu \ --user-menu \
--cmd sway --cmd "uwsm start -- sway-uwsm.desktop"
''; '';
}; };
}; };
@ -11027,18 +11049,22 @@ Again, we adapt =nix= to our needs, enable the home-manager command for non-NixO
in in
{ {
options.swarselmodules.general = lib.mkEnableOption "general nix settings"; options.swarselmodules.general = lib.mkEnableOption "general nix settings";
config = lib.mkIf config.swarselmodules.general { config = let
nix-version = "2_30";
in lib.mkIf config.swarselmodules.general {
nix = lib.mkIf (!config.swarselsystems.isNixos) { nix = lib.mkIf (!config.swarselsystems.isNixos) {
package = lib.mkForce pkgs.nixVersions.nix_2_28; package = lib.mkForce pkgs.nixVersions."nix_${nix-version}";
# extraOptions = '' # extraOptions = ''
# plugin-files = ${pkgs.dev.nix-plugins}/lib/nix/plugins # plugin-files = ${pkgs.dev.nix-plugins}/lib/nix/plugins
# extra-builtins-file = ${self + /nix/extra-builtins.nix} # extra-builtins-file = ${self + /nix/extra-builtins.nix}
# ''; # '';
extraOptions = '' extraOptions = let
plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: { nix-plugins = pkgs.nix-plugins.override {
buildInputs = [config.nix.package pkgs.boost]; nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
patches = o.patches or []; };
})}/lib/nix/plugins in
''
plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
''; '';
settings = { settings = {
@ -11108,7 +11134,7 @@ It can be set to either:
- a PCI id in the form =vendor_id:device_id= - a PCI id in the form =vendor_id:device_id=
#+begin_src nix-ts :tangle modules/home/common/nixgl.nix #+begin_src nix-ts :tangle modules/home/common/nixgl.nix
{ lib, config, nixgl, ... }: { lib, config, inputs, ... }:
{ {
options.swarselmodules.nixgl = lib.mkEnableOption "nixgl settings"; options.swarselmodules.nixgl = lib.mkEnableOption "nixgl settings";
options.swarselsystems = { options.swarselsystems = {
@ -11120,11 +11146,11 @@ It can be set to either:
}; };
config = lib.mkIf config.swarselmodules.nixgl { config = lib.mkIf config.swarselmodules.nixgl {
nixGL = lib.mkIf (!config.swarselsystems.isNixos) { nixGL = lib.mkIf (!config.swarselsystems.isNixos) {
inherit (nixgl) packages; inherit (inputs.nixgl) packages;
defaultWrapper = lib.mkDefault "mesa"; defaultWrapper = lib.mkDefault "mesa";
vulkan.enable = lib.mkDefault false; vulkan.enable = lib.mkDefault false;
prime = lib.mkIf config.swarselsystem.isSecondaryGpu { prime = lib.mkIf config.swarselsystems.isSecondaryGpu {
card = config.swarselsystem.secondaryGpuCard; card = config.swarselsystems.secondaryGpuCard;
installScript = "mesa"; installScript = "mesa";
}; };
offloadWrapper = lib.mkIf config.swarselsystem.isSecondaryGpu "mesaPrime"; offloadWrapper = lib.mkIf config.swarselsystem.isSecondaryGpu "mesaPrime";
@ -11407,13 +11433,13 @@ I use sops-nix to handle secrets that I want to have available on my machines at
Since we are using the home-manager implementation here, we need to specify the runtime path. Since we are using the home-manager implementation here, we need to specify the runtime path.
#+begin_src nix-ts :tangle modules/home/common/sops.nix #+begin_src nix-ts :tangle modules/home/common/sops.nix
{ config, lib, ... }: { config, lib, inputs, ... }:
let let
inherit (config.swarselsystems) homeDir; inherit (config.swarselsystems) homeDir;
in in
{ {
options.swarselmodules.sops = lib.mkEnableOption "sops settings"; options.swarselmodules.sops = lib.mkEnableOption "sops settings";
config = lib.mkIf config.swarselmodules.sops { config = lib.optionalAttrs (inputs ? sops) {
sops = { sops = {
age.sshKeyPaths = [ "${homeDir}/.ssh/sops" "${homeDir}/.ssh/ssh_host_ed25519_key" ]; age.sshKeyPaths = [ "${homeDir}/.ssh/sops" "${homeDir}/.ssh/ssh_host_ed25519_key" ];
defaultSopsFile = "${homeDir}/.dotfiles/secrets/general/secrets.yaml"; defaultSopsFile = "${homeDir}/.dotfiles/secrets/general/secrets.yaml";
@ -11430,18 +11456,14 @@ I use sops-nix to handle secrets that I want to have available on my machines at
:END: :END:
#+begin_src nix-ts :tangle modules/home/common/yubikey.nix #+begin_src nix-ts :tangle modules/home/common/yubikey.nix
{ lib, config, nixosConfig ? config, ... }: { lib, config, inputs, nixosConfig ? config, ... }:
let let
inherit (config.swarselsystems) homeDir; inherit (config.swarselsystems) homeDir;
in in
{ {
options.swarselmodules.yubikey = lib.mkEnableOption "yubikey settings"; options.swarselmodules.yubikey = lib.mkEnableOption "yubikey settings";
config = lib.mkIf config.swarselmodules.yubikey { config = lib.mkIf config.swarselmodules.yubikey ({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
u2f-keys = { path = "${homeDir}/.config/Yubico/u2f_keys"; };
};
pam.yubico.authorizedYubiKeys = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) { pam.yubico.authorizedYubiKeys = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
ids = [ ids = [
@ -11449,7 +11471,11 @@ I use sops-nix to handle secrets that I want to have available on my machines at
nixosConfig.repo.secrets.common.yubikeys.dev2 nixosConfig.repo.secrets.common.yubikeys.dev2
]; ];
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
u2f-keys = { path = "${homeDir}/.config/Yubico/u2f_keys"; };
}; };
});
} }
#+end_src #+end_src
@ -11493,6 +11519,10 @@ It is very convenient to have SSH aliases in place for machines that I use. This
hostname = "192.168.1.136"; hostname = "192.168.1.136";
user = "root"; user = "root";
}; };
"dgx" = {
hostname = "192.168.48.200";
user = "swarsel";
};
"winters" = { "winters" = {
hostname = "192.168.178.24"; hostname = "192.168.178.24";
user = "root"; user = "root";
@ -12282,7 +12312,7 @@ lib.mkMerge [ zshConfigEarlyInit zshConfig ];
Currently I only use it as before with =initExtra= though. Currently I only use it as before with =initExtra= though.
#+begin_src nix-ts :tangle modules/home/common/zsh.nix #+begin_src nix-ts :tangle modules/home/common/zsh.nix
{ config, pkgs, lib, minimal, globals, nixosConfig ? config, ... }: { config, pkgs, lib, minimal, inputs, globals, nixosConfig ? config, ... }:
let let
inherit (config.swarselsystems) flakePath; inherit (config.swarselsystems) flakePath;
crocDomain = globals.services.croc.domain; crocDomain = globals.services.croc.domain;
@ -12296,12 +12326,7 @@ Currently I only use it as before with =initExtra= though.
}; };
}; };
config = lib.mkIf config.swarselmodules.zsh config = lib.mkIf config.swarselmodules.zsh
{ ({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
croc-password = { };
github-nixpkgs-review-token = { };
};
programs.zsh = { programs.zsh = {
enable = true; enable = true;
@ -12413,13 +12438,20 @@ Currently I only use it as before with =initExtra= though.
''; '';
sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) { sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) {
CROC_RELAY = crocDomain; CROC_RELAY = crocDomain;
CROC_PASS = "$(cat ${nixosConfig.sops.secrets.croc-password.path})"; CROC_PASS = "$(cat ${nixosConfig.sops.secrets.croc-password.path or ""})";
GITHUB_TOKEN = "$(cat ${nixosConfig.sops.secrets.github-nixpkgs-review-token.path})"; GITHUB_TOKEN = "$(cat ${nixosConfig.sops.secrets.github-nixpkgs-review-token.path or ""})";
QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins"; QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins";
# QTWEBENGINE_CHROMIUM_FLAGS = "--no-sandbox"; # QTWEBENGINE_CHROMIUM_FLAGS = "--no-sandbox";
}; };
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
croc-password = { };
github-nixpkgs-review-token = { };
}; };
});
} }
#+end_src #+end_src
@ -12564,7 +12596,7 @@ Currently I only use it as before with =initExtra= though.
Normally I use 4 mail accounts - here I set them all up. Three of them are Google accounts (sadly), which are a chore to setup. The last is just a sender account that I setup SMTP for here. Normally I use 4 mail accounts - here I set them all up. Three of them are Google accounts (sadly), which are a chore to setup. The last is just a sender account that I setup SMTP for here.
#+begin_src nix-ts :tangle modules/home/common/mail.nix #+begin_src nix-ts :tangle modules/home/common/mail.nix
{ lib, config, nixosConfig ? config, ... }: { lib, config, inputs, nixosConfig ? config, ... }:
let let
inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address2-name address3 address3-name address4 address4-user address4-host; inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address2-name address3 address3-name address4 address4-user address4-host;
inherit (nixosConfig.repo.secrets.common) fullName; inherit (nixosConfig.repo.secrets.common) fullName;
@ -12572,14 +12604,8 @@ Normally I use 4 mail accounts - here I set them all up. Three of them are Googl
in in
{ {
options.swarselmodules.mail = lib.mkEnableOption "mail settings"; options.swarselmodules.mail = lib.mkEnableOption "mail settings";
config = lib.mkIf config.swarselmodules.mail { config = lib.mkIf config.swarselmodules.mail
({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
address1-token = { path = "${xdgDir}/secrets/address1-token"; };
address2-token = { path = "${xdgDir}/secrets/address2-token"; };
address3-token = { path = "${xdgDir}/secrets/address3-token"; };
address4-token = { path = "${xdgDir}/secrets/address4-token"; };
};
programs = { programs = {
mbsync = { mbsync = {
@ -12753,7 +12779,14 @@ Normally I use 4 mail accounts - here I set them all up. Three of them are Googl
}; };
}; };
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
address1-token = { path = "${xdgDir}/secrets/address1-token"; };
address2-token = { path = "${xdgDir}/secrets/address2-token"; };
address3-token = { path = "${xdgDir}/secrets/address3-token"; };
address4-token = { path = "${xdgDir}/secrets/address4-token"; };
}; };
});
} }
#+end_src #+end_src
@ -12774,23 +12807,8 @@ Lastly, I am defining some more packages here that the parser has problems findi
in in
{ {
options.swarselmodules.emacs = lib.mkEnableOption "emacs settings"; options.swarselmodules.emacs = lib.mkEnableOption "emacs settings";
config = lib.mkIf config.swarselmodules.emacs { config = lib.mkIf config.swarselmodules.emacs ({
# needed for elfeed # needed for elfeed
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
};
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
# enable emacs overlay for bleeding edge features # enable emacs overlay for bleeding edge features
# also read init.el file and install use-package packages # also read init.el file and install use-package packages
programs.emacs = { programs.emacs = {
@ -12860,7 +12878,25 @@ Lastly, I am defining some more packages here that the parser has problems findi
socketActivation.enable = false; socketActivation.enable = false;
startWithUserSession = "graphical"; startWithUserSession = "graphical";
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
}; };
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
});
} }
#+end_src #+end_src
@ -12880,7 +12916,7 @@ The rest of the related configuration is found here:
- [[#h:f93f66f9-6b8b-478e-b139-b2f382c1f25e][waybarupdate]] - [[#h:f93f66f9-6b8b-478e-b139-b2f382c1f25e][waybarupdate]]
#+begin_src nix-ts :tangle modules/home/common/waybar.nix #+begin_src nix-ts :tangle modules/home/common/waybar.nix
{ self, config, lib, pkgs, ... }: { self, config, lib, inputs, pkgs, ... }:
let let
inherit (config.swarselsystems) xdgDir; inherit (config.swarselsystems) xdgDir;
generateIcons = n: lib.concatStringsSep " " (builtins.map (x: "{icon" + toString x + "}") (lib.range 0 (n - 1))); generateIcons = n: lib.concatStringsSep " " (builtins.map (x: "{icon" + toString x + "}") (lib.range 0 (n - 1)));
@ -12934,7 +12970,7 @@ The rest of the related configuration is found here:
internal = true; internal = true;
}; };
}; };
config = lib.mkIf config.swarselmodules.waybar { config = lib.mkIf config.swarselmodules.waybar ({
swarselsystems = { swarselsystems = {
waybarModules = lib.mkIf config.swarselsystems.isLaptop (modulesLeft ++ [ waybarModules = lib.mkIf config.swarselsystems.isLaptop (modulesLeft ++ [
@ -12942,16 +12978,12 @@ The rest of the related configuration is found here:
] ++ modulesRight); ] ++ modulesRight);
}; };
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; };
};
services.playerctld.enable = true; services.playerctld.enable = true;
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd = { systemd = {
enable = true; enable = false;
# target = "sway-session.target"; # target = "sway-session.target";
inherit (config.wayland.systemd) target; inherit (config.wayland.systemd) target;
}; };
@ -13206,7 +13238,11 @@ The rest of the related configuration is found here:
}; };
style = builtins.readFile (self + /files/waybar/style.css); style = builtins.readFile (self + /files/waybar/style.css);
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; };
}; };
});
} }
#+end_src #+end_src
@ -13468,6 +13504,9 @@ The `extraConfig` section here CANNOT be reindented. This has something to do wi
default-timeout = 2000; default-timeout = 2000;
group-by = "category"; group-by = "category";
}; };
"mode=do-not-disturb" = {
invisible = true;
};
}; };
}; };
}; };
@ -13708,7 +13747,7 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded
Currently, I am too lazy to explain every option here, but most of it is very self-explaining in any case. Currently, I am too lazy to explain every option here, but most of it is very self-explaining in any case.
#+begin_src nix-ts :tangle modules/home/common/sway.nix #+begin_src nix-ts :tangle modules/home/common/sway.nix
{ config, lib, vars, ... }: { config, lib, vars, nixosConfig ? config, ... }:
let let
eachOutput = _: monitor: { eachOutput = _: monitor: {
inherit (monitor) name; inherit (monitor) name;
@ -14091,6 +14130,7 @@ Currently, I am too lazy to explain every option here, but most of it is very se
export XDG_CURRENT_DESKTOP=sway; export XDG_CURRENT_DESKTOP=sway;
export XDG_SESSION_DESKTOP=sway; export XDG_SESSION_DESKTOP=sway;
export _JAVA_AWT_WM_NONREPARENTING=1; export _JAVA_AWT_WM_NONREPARENTING=1;
export GITHUB_NOTIFICATION_TOKEN_PATH=${nixosConfig.sops.secrets.github-notifications-token.path};
'' + vars.waylandExports; '' + vars.waylandExports;
# extraConfigEarly = " # extraConfigEarly = "
# exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK # exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
@ -14741,21 +14781,15 @@ This service changes the screen hue at night. I am not sure if that really does
#+begin_src nix-ts :tangle modules/home/common/anki.nix #+begin_src nix-ts :tangle modules/home/common/anki.nix
{ lib, config, pkgs, globals, nixosConfig ? config, ... }: { lib, config, pkgs, globals, inputs, nixosConfig ? config, ... }:
let let
moduleName = "anki"; moduleName = "anki";
inherit (config.swarselsystems) isPublic isNixos; inherit (config.swarselsystems) isPublic isNixos;
in in
{ {
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings"; options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
config = lib.mkIf config.swarselmodules.${moduleName} { config = lib.mkIf config.swarselmodules.${moduleName}
({
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
anki-user = { };
anki-pw = { };
};
};
programs.anki = { programs.anki = {
enable = true; enable = true;
@ -14803,7 +14837,14 @@ This service changes the screen hue at night. I am not sure if that really does
}) })
]; ];
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
anki-user = { };
anki-pw = { };
}; };
};
});
} }
#+end_src #+end_src
@ -16947,13 +16988,15 @@ This utility checks if there are updated packages in nixpkgs-unstable. It does s
#+begin_src nix-ts :tangle pkgs/kanshare/default.nix #+begin_src nix-ts :tangle pkgs/kanshare/default.nix
{ name, writeShellApplication, wlr-randr, busybox, wl-mirror, ... }: { name, writeShellApplication, wlr-randr, busybox, wl-mirror, mako, ... }:
writeShellApplication { writeShellApplication {
inherit name; inherit name;
runtimeInputs = [ wlr-randr busybox wl-mirror ]; runtimeInputs = [ wlr-randr busybox wl-mirror mako ];
text = '' text = ''
makoctl mode -a do-not-disturb
wlr-randr | grep "$2" | cut -d" " -f1 | xargs -I{} wl-present mirror "$1" --fullscreen-output {} wlr-randr | grep "$2" | cut -d" " -f1 | xargs -I{} wl-present mirror "$1" --fullscreen-output {}
makoctl mode -r do-not-disturb
''; '';
} }
#+end_src #+end_src
@ -18232,7 +18275,61 @@ This script allows for quick git replace of a string.
inherit name; inherit name;
runtimeInputs = [ git gnugrep findutils ]; runtimeInputs = [ git gnugrep findutils ];
text = '' text = ''
function help_and_exit() {
echo
echo "Remotely installs SwarselSystem on a target machine including secret deployment."
echo
echo "USAGE: $0 [-f/-t} <from> <to>"
echo
echo "ARGS:"
echo " -f | --filenames Replace in filenames."
echo " -d | --directory Replace text in files within this directory."
echo " -r | --repo Replace text in files in the entire git repo."
echo " -h | --help Print this help."
exit 0
}
target_files=false
target_repo=false
target_dirs=false
while [[ $# -gt 0 ]]; do
case "$1" in
-f | --filenames)
shift
target_files=true
;;
-r | --repo)
shift
target_repo=rue
;;
-d | --directory)
shift
target_dirs=rue
;;
-h | --help) help_and_exit ;;
,*)
echo "Invalid option detected."
help_and_exit
;;
esac
shift
done
if [[ $target_files == "true" ]]; then
for file in $(git ls-files | grep "$1" | sed -e "s/\($1[^/]*\).*/\1/" | uniq); do
git mv "$file" "''${file//$1/$2}"
done
fi
if [[ $target_repo == "true" ]]; then
git grep -l "$1" | xargs sed -i "s/$1/$2/g" git grep -l "$1" | xargs sed -i "s/$1/$2/g"
fi
if [[ $target_dirs == "true" ]]; then
grep -rl "$1" . | xargs sed -i "s/$1/$2/g"
fi
''; '';
} }

6
flake.lock generated
View file

@ -6365,11 +6365,11 @@
}, },
"nixpkgs-dev": { "nixpkgs-dev": {
"locked": { "locked": {
"lastModified": 1759233809, "lastModified": 1761589965,
"narHash": "sha256-ww6JlKuclxzcBb+cb4GCnVw4PtI+7xd3J9/ctINWKeA=", "narHash": "sha256-ZtypYmGwo7wUOo88UKVAdUZCYCpvFM8O0bEmI7+NW5k=",
"owner": "Swarsel", "owner": "Swarsel",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d3e334a2a4f9d50568bf03ec62cd445faac7ce9e", "rev": "ed3254fbd834e5bfbf6bc9586d57307a92f1a269",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -2,8 +2,8 @@
{ {
imports = [ imports = [
inputs.stylix.homeManagerModules.stylix inputs.stylix.homeModules.stylix
inputs.sops-nix.homeManagerModules.sops # inputs.sops-nix.homeManagerModules.sops
inputs.nix-index-database.homeModules.nix-index inputs.nix-index-database.homeModules.nix-index
"${self}/modules/home" "${self}/modules/home"
"${self}/modules/nixos/common/pii.nix" "${self}/modules/nixos/common/pii.nix"

View file

@ -1,18 +1,12 @@
{ lib, config, pkgs, globals, nixosConfig ? config, ... }: { lib, config, pkgs, globals, inputs, nixosConfig ? config, ... }:
let let
moduleName = "anki"; moduleName = "anki";
inherit (config.swarselsystems) isPublic isNixos; inherit (config.swarselsystems) isPublic isNixos;
in in
{ {
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings"; options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
config = lib.mkIf config.swarselmodules.${moduleName} { config = lib.mkIf config.swarselmodules.${moduleName}
({
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
anki-user = { };
anki-pw = { };
};
};
programs.anki = { programs.anki = {
enable = true; enable = true;
@ -60,6 +54,13 @@ in
}) })
]; ];
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
anki-user = { };
anki-pw = { };
}; };
};
});
} }

View file

@ -5,23 +5,8 @@ let
in in
{ {
options.swarselmodules.emacs = lib.mkEnableOption "emacs settings"; options.swarselmodules.emacs = lib.mkEnableOption "emacs settings";
config = lib.mkIf config.swarselmodules.emacs { config = lib.mkIf config.swarselmodules.emacs ({
# needed for elfeed # needed for elfeed
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
};
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
# enable emacs overlay for bleeding edge features # enable emacs overlay for bleeding edge features
# also read init.el file and install use-package packages # also read init.el file and install use-package packages
programs.emacs = { programs.emacs = {
@ -91,5 +76,23 @@ in
socketActivation.enable = false; socketActivation.enable = false;
startWithUserSession = "graphical"; startWithUserSession = "graphical";
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
}; };
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
});
} }

View file

@ -1,4 +1,4 @@
{ lib, config, nixosConfig ? config, ... }: { lib, config, inputs, nixosConfig ? config, ... }:
let let
inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address2-name address3 address3-name address4 address4-user address4-host; inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address2-name address3 address3-name address4 address4-user address4-host;
inherit (nixosConfig.repo.secrets.common) fullName; inherit (nixosConfig.repo.secrets.common) fullName;
@ -6,14 +6,8 @@ let
in in
{ {
options.swarselmodules.mail = lib.mkEnableOption "mail settings"; options.swarselmodules.mail = lib.mkEnableOption "mail settings";
config = lib.mkIf config.swarselmodules.mail { config = lib.mkIf config.swarselmodules.mail
({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
address1-token = { path = "${xdgDir}/secrets/address1-token"; };
address2-token = { path = "${xdgDir}/secrets/address2-token"; };
address3-token = { path = "${xdgDir}/secrets/address3-token"; };
address4-token = { path = "${xdgDir}/secrets/address4-token"; };
};
programs = { programs = {
mbsync = { mbsync = {
@ -187,5 +181,12 @@ in
}; };
}; };
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
address1-token = { path = "${xdgDir}/secrets/address1-token"; };
address2-token = { path = "${xdgDir}/secrets/address2-token"; };
address3-token = { path = "${xdgDir}/secrets/address3-token"; };
address4-token = { path = "${xdgDir}/secrets/address4-token"; };
}; };
});
} }

View file

@ -28,6 +28,9 @@
default-timeout = 2000; default-timeout = 2000;
group-by = "category"; group-by = "category";
}; };
"mode=do-not-disturb" = {
invisible = true;
};
}; };
}; };
}; };

View file

@ -1,4 +1,4 @@
{ lib, config, nixgl, ... }: { lib, config, inputs, ... }:
{ {
options.swarselmodules.nixgl = lib.mkEnableOption "nixgl settings"; options.swarselmodules.nixgl = lib.mkEnableOption "nixgl settings";
options.swarselsystems = { options.swarselsystems = {
@ -10,11 +10,11 @@
}; };
config = lib.mkIf config.swarselmodules.nixgl { config = lib.mkIf config.swarselmodules.nixgl {
nixGL = lib.mkIf (!config.swarselsystems.isNixos) { nixGL = lib.mkIf (!config.swarselsystems.isNixos) {
inherit (nixgl) packages; inherit (inputs.nixgl) packages;
defaultWrapper = lib.mkDefault "mesa"; defaultWrapper = lib.mkDefault "mesa";
vulkan.enable = lib.mkDefault false; vulkan.enable = lib.mkDefault false;
prime = lib.mkIf config.swarselsystem.isSecondaryGpu { prime = lib.mkIf config.swarselsystems.isSecondaryGpu {
card = config.swarselsystem.secondaryGpuCard; card = config.swarselsystems.secondaryGpuCard;
installScript = "mesa"; installScript = "mesa";
}; };
offloadWrapper = lib.mkIf config.swarselsystem.isSecondaryGpu "mesaPrime"; offloadWrapper = lib.mkIf config.swarselsystem.isSecondaryGpu "mesaPrime";

View file

@ -4,18 +4,25 @@ let
in in
{ {
options.swarselmodules.general = lib.mkEnableOption "general nix settings"; options.swarselmodules.general = lib.mkEnableOption "general nix settings";
config = lib.mkIf config.swarselmodules.general { config =
let
nix-version = "2_30";
in
lib.mkIf config.swarselmodules.general {
nix = lib.mkIf (!config.swarselsystems.isNixos) { nix = lib.mkIf (!config.swarselsystems.isNixos) {
package = lib.mkForce pkgs.nixVersions.nix_2_28; package = lib.mkForce pkgs.nixVersions."nix_${nix-version}";
# extraOptions = '' # extraOptions = ''
# plugin-files = ${pkgs.dev.nix-plugins}/lib/nix/plugins # plugin-files = ${pkgs.dev.nix-plugins}/lib/nix/plugins
# extra-builtins-file = ${self + /nix/extra-builtins.nix} # extra-builtins-file = ${self + /nix/extra-builtins.nix}
# ''; # '';
extraOptions = '' extraOptions =
plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: { let
buildInputs = [config.nix.package pkgs.boost]; nix-plugins = pkgs.nix-plugins.override {
patches = o.patches or []; nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
})}/lib/nix/plugins };
in
''
plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
''; '';
settings = { settings = {

View file

@ -1,10 +1,10 @@
{ config, lib, ... }: { config, lib, inputs, ... }:
let let
inherit (config.swarselsystems) homeDir; inherit (config.swarselsystems) homeDir;
in in
{ {
options.swarselmodules.sops = lib.mkEnableOption "sops settings"; options.swarselmodules.sops = lib.mkEnableOption "sops settings";
config = lib.mkIf config.swarselmodules.sops { config = lib.optionalAttrs (inputs ? sops) {
sops = { sops = {
age.sshKeyPaths = [ "${homeDir}/.ssh/sops" "${homeDir}/.ssh/ssh_host_ed25519_key" ]; age.sshKeyPaths = [ "${homeDir}/.ssh/sops" "${homeDir}/.ssh/ssh_host_ed25519_key" ];
defaultSopsFile = "${homeDir}/.dotfiles/secrets/general/secrets.yaml"; defaultSopsFile = "${homeDir}/.dotfiles/secrets/general/secrets.yaml";

View file

@ -30,6 +30,10 @@
hostname = "192.168.1.136"; hostname = "192.168.1.136";
user = "root"; user = "root";
}; };
"dgx" = {
hostname = "192.168.48.200";
user = "swarsel";
};
"winters" = { "winters" = {
hostname = "192.168.178.24"; hostname = "192.168.178.24";
user = "root"; user = "root";

View file

@ -1,4 +1,4 @@
{ config, lib, vars, ... }: { config, lib, vars, nixosConfig ? config, ... }:
let let
eachOutput = _: monitor: { eachOutput = _: monitor: {
inherit (monitor) name; inherit (monitor) name;
@ -381,6 +381,7 @@ in
export XDG_CURRENT_DESKTOP=sway; export XDG_CURRENT_DESKTOP=sway;
export XDG_SESSION_DESKTOP=sway; export XDG_SESSION_DESKTOP=sway;
export _JAVA_AWT_WM_NONREPARENTING=1; export _JAVA_AWT_WM_NONREPARENTING=1;
export GITHUB_NOTIFICATION_TOKEN_PATH=${nixosConfig.sops.secrets.github-notifications-token.path};
'' + vars.waylandExports; '' + vars.waylandExports;
# extraConfigEarly = " # extraConfigEarly = "
# exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK # exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK

View file

@ -1,4 +1,4 @@
{ self, config, lib, pkgs, ... }: { self, config, lib, inputs, pkgs, ... }:
let let
inherit (config.swarselsystems) xdgDir; inherit (config.swarselsystems) xdgDir;
generateIcons = n: lib.concatStringsSep " " (builtins.map (x: "{icon" + toString x + "}") (lib.range 0 (n - 1))); generateIcons = n: lib.concatStringsSep " " (builtins.map (x: "{icon" + toString x + "}") (lib.range 0 (n - 1)));
@ -52,7 +52,7 @@ in
internal = true; internal = true;
}; };
}; };
config = lib.mkIf config.swarselmodules.waybar { config = lib.mkIf config.swarselmodules.waybar ({
swarselsystems = { swarselsystems = {
waybarModules = lib.mkIf config.swarselsystems.isLaptop (modulesLeft ++ [ waybarModules = lib.mkIf config.swarselsystems.isLaptop (modulesLeft ++ [
@ -60,16 +60,12 @@ in
] ++ modulesRight); ] ++ modulesRight);
}; };
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; };
};
services.playerctld.enable = true; services.playerctld.enable = true;
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd = { systemd = {
enable = true; enable = false;
# target = "sway-session.target"; # target = "sway-session.target";
inherit (config.wayland.systemd) target; inherit (config.wayland.systemd) target;
}; };
@ -324,5 +320,9 @@ in
}; };
style = builtins.readFile (self + /files/waybar/style.css); style = builtins.readFile (self + /files/waybar/style.css);
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; };
}; };
});
} }

View file

@ -1,15 +1,11 @@
{ lib, config, nixosConfig ? config, ... }: { lib, config, inputs, nixosConfig ? config, ... }:
let let
inherit (config.swarselsystems) homeDir; inherit (config.swarselsystems) homeDir;
in in
{ {
options.swarselmodules.yubikey = lib.mkEnableOption "yubikey settings"; options.swarselmodules.yubikey = lib.mkEnableOption "yubikey settings";
config = lib.mkIf config.swarselmodules.yubikey { config = lib.mkIf config.swarselmodules.yubikey ({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
u2f-keys = { path = "${homeDir}/.config/Yubico/u2f_keys"; };
};
pam.yubico.authorizedYubiKeys = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) { pam.yubico.authorizedYubiKeys = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
ids = [ ids = [
@ -17,5 +13,9 @@ in
nixosConfig.repo.secrets.common.yubikeys.dev2 nixosConfig.repo.secrets.common.yubikeys.dev2
]; ];
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
u2f-keys = { path = "${homeDir}/.config/Yubico/u2f_keys"; };
}; };
});
} }

View file

@ -1,4 +1,4 @@
{ config, pkgs, lib, minimal, globals, nixosConfig ? config, ... }: { config, pkgs, lib, minimal, inputs, globals, nixosConfig ? config, ... }:
let let
inherit (config.swarselsystems) flakePath; inherit (config.swarselsystems) flakePath;
crocDomain = globals.services.croc.domain; crocDomain = globals.services.croc.domain;
@ -12,12 +12,7 @@ in
}; };
}; };
config = lib.mkIf config.swarselmodules.zsh config = lib.mkIf config.swarselmodules.zsh
{ ({
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
croc-password = { };
github-nixpkgs-review-token = { };
};
programs.zsh = { programs.zsh = {
enable = true; enable = true;
@ -129,11 +124,18 @@ in
''; '';
sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) { sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) {
CROC_RELAY = crocDomain; CROC_RELAY = crocDomain;
CROC_PASS = "$(cat ${nixosConfig.sops.secrets.croc-password.path})"; CROC_PASS = "$(cat ${nixosConfig.sops.secrets.croc-password.path or ""})";
GITHUB_TOKEN = "$(cat ${nixosConfig.sops.secrets.github-nixpkgs-review-token.path})"; GITHUB_TOKEN = "$(cat ${nixosConfig.sops.secrets.github-nixpkgs-review-token.path or ""})";
QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins"; QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins";
# QTWEBENGINE_CHROMIUM_FLAGS = "--no-sandbox"; # QTWEBENGINE_CHROMIUM_FLAGS = "--no-sandbox";
}; };
}; };
} // lib.optionalAttrs (inputs ? sops) {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
croc-password = { };
github-nixpkgs-review-token = { };
}; };
});
} }

View file

@ -7,12 +7,13 @@
settings = { settings = {
# initial_session.command = "sway"; # initial_session.command = "sway";
initial_session.command = "uwsm start -- sway-uwsm.desktop"; initial_session.command = "uwsm start -- sway-uwsm.desktop";
# --cmd sway
default_session.command = '' default_session.command = ''
${pkgs.tuigreet}/bin/tuigreet \ ${pkgs.tuigreet}/bin/tuigreet \
--time \ --time \
--asterisks \ --asterisks \
--user-menu \ --user-menu \
--cmd sway --cmd "uwsm start -- sway-uwsm.desktop"
''; '';
}; };
}; };

View file

@ -60,8 +60,12 @@ in
sopsFile = "${config.swarselsystems.flakePath}/secrets/general/secrets.yaml"; sopsFile = "${config.swarselsystems.flakePath}/secrets/general/secrets.yaml";
}; };
nix = { nix =
package = pkgs.nixVersions.nix_2_28; let
nix-version = "2_30";
in
{
package = pkgs.nixVersions."nix_${nix-version}";
settings = { settings = {
experimental-features = [ experimental-features = [
"nix-command" "nix-command"
@ -78,11 +82,22 @@ in
# '' + lib.optionalString (!minimal) '' # '' + lib.optionalString (!minimal) ''
# !include ${config.sops.secrets.github-api-token.path} # !include ${config.sops.secrets.github-api-token.path}
# ''; # '';
extraOptions = '' # extraOptions = ''
plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: { # plugin-files = ${pkgs.nix-plugins.overrideAttrs (o: {
buildInputs = [config.nix.package pkgs.boost]; # buildInputs = [config.nix.package pkgs.boost];
patches = o.patches or []; # patches = o.patches or [];
})}/lib/nix/plugins # })}/lib/nix/plugins
# extra-builtins-file = ${self + /nix/extra-builtins.nix}
# '';
extraOptions =
let
nix-plugins = pkgs.nix-plugins.override {
nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
};
in
''
plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
'' + lib.optionalString (!minimal) '' '' + lib.optionalString (!minimal) ''
!include ${config.sops.secrets.github-api-token.path} !include ${config.sops.secrets.github-api-token.path}

View file

@ -46,9 +46,13 @@
}; };
}; };
devshells.default = { devshells.default =
let
nix-version = "2_30";
in
{
packages = [ packages = [
(builtins.trace "alarm: we pinned nix_2_28 because of https://github.com/shlevy/nix-plugins/issues/20" pkgs.nixVersions.nix_2_28) # Always use the nix version from this flake's nixpkgs version, so that nix-plugins (below) doesn't fail because of different nix versions. (builtins.trace "alarm: pinned nix_${nix-version}" pkgs.nixVersions."nix_${nix-version}")
pkgs.git pkgs.git
pkgs.just pkgs.just
pkgs.age pkgs.age
@ -84,12 +88,12 @@
{ {
package = pkgs.nix-output-monitor; package = pkgs.nix-output-monitor;
help = "Nix Output Monitor (a drop-in alternative for `nix` which shows a build graph)"; help = "Nix Output Monitor (a drop-in alternative for `nix` which shows a build graph)";
name = "nom"; name = "nom \"$@\"";
} }
{ {
name = "hm"; name = "hm";
help = "Manage home-manager config"; help = "Manage home-manager config";
command = "home-manager"; command = "home-manager \"$@\"";
} }
{ {
name = "fmt"; name = "fmt";
@ -114,7 +118,7 @@
{ {
name = "bld"; name = "bld";
help = "Build a number of configurations"; help = "Build a number of configurations";
command = "swarel-build \"$@\""; command = "swarsel-build \"$@\"";
} }
{ {
name = "c"; name = "c";
@ -125,13 +129,19 @@
devshell.startup.pre-commit-install.text = "pre-commit install"; devshell.startup.pre-commit-install.text = "pre-commit install";
env = [ env =
let
nix-plugins = pkgs.nix-plugins.override {
nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
};
in
[
{ {
# Additionally configure nix-plugins with our extra builtins file. # Additionally configure nix-plugins with our extra builtins file.
# We need this for our repo secrets. # We need this for our repo secrets.
name = "NIX_CONFIG"; name = "NIX_CONFIG";
value = '' value = ''
plugin-files = ${pkgs.nix-plugins}/lib/nix/plugins plugin-files = ${nix-plugins}/lib/nix/plugins
extra-builtins-file = ${self + /nix/extra-builtins.nix} extra-builtins-file = ${self + /nix/extra-builtins.nix}
''; '';
} }

View file

@ -93,7 +93,7 @@
modules = [ modules = [
inputs.niri-flake.homeModules.niri inputs.niri-flake.homeModules.niri
inputs.nix-index-database.homeModules.nix-index inputs.nix-index-database.homeModules.nix-index
inputs.sops-nix.homeManagerModules.sops # inputs.sops-nix.homeManagerModules.sops
inputs.spicetify-nix.homeManagerModules.default inputs.spicetify-nix.homeManagerModules.default
inputs.swarsel-nix.homeModules.default inputs.swarsel-nix.homeModules.default
"${self}/hosts/${type}/${configName}" "${self}/hosts/${type}/${configName}"

View file

@ -4,6 +4,60 @@ writeShellApplication {
inherit name; inherit name;
runtimeInputs = [ git gnugrep findutils ]; runtimeInputs = [ git gnugrep findutils ];
text = '' text = ''
function help_and_exit() {
echo
echo "Remotely installs SwarselSystem on a target machine including secret deployment."
echo
echo "USAGE: $0 [-f/-t} <from> <to>"
echo
echo "ARGS:"
echo " -f | --filenames Replace in filenames."
echo " -d | --directory Replace text in files within this directory."
echo " -r | --repo Replace text in files in the entire git repo."
echo " -h | --help Print this help."
exit 0
}
target_files=false
target_repo=false
target_dirs=false
while [[ $# -gt 0 ]]; do
case "$1" in
-f | --filenames)
shift
target_files=true
;;
-r | --repo)
shift
target_repo=rue
;;
-d | --directory)
shift
target_dirs=rue
;;
-h | --help) help_and_exit ;;
*)
echo "Invalid option detected."
help_and_exit
;;
esac
shift
done
if [[ $target_files == "true" ]]; then
for file in $(git ls-files | grep "$1" | sed -e "s/\($1[^/]*\).*/\1/" | uniq); do
git mv "$file" "''${file//$1/$2}"
done
fi
if [[ $target_repo == "true" ]]; then
git grep -l "$1" | xargs sed -i "s/$1/$2/g" git grep -l "$1" | xargs sed -i "s/$1/$2/g"
fi
if [[ $target_dirs == "true" ]]; then
grep -rl "$1" . | xargs sed -i "s/$1/$2/g"
fi
''; '';
} }

View file

@ -1,9 +1,11 @@
{ name, writeShellApplication, wlr-randr, busybox, wl-mirror, ... }: { name, writeShellApplication, wlr-randr, busybox, wl-mirror, mako, ... }:
writeShellApplication { writeShellApplication {
inherit name; inherit name;
runtimeInputs = [ wlr-randr busybox wl-mirror ]; runtimeInputs = [ wlr-randr busybox wl-mirror mako ];
text = '' text = ''
makoctl mode -a do-not-disturb
wlr-randr | grep "$2" | cut -d" " -f1 | xargs -I{} wl-present mirror "$1" --fullscreen-output {} wlr-randr | grep "$2" | cut -d" " -f1 | xargs -I{} wl-present mirror "$1" --fullscreen-output {}
makoctl mode -r do-not-disturb
''; '';
} }