feat: renamed computers to hosts

This commit is contained in:
Artur Manuel 2024-11-30 15:18:36 +00:00
commit b03c70b486
34 changed files with 5 additions and 6 deletions

16
hosts/shared/aliases.nix Normal file
View file

@ -0,0 +1,16 @@
{pkgs, ...}: let
ezaOptions = "--colour=always --icons=never --group-directories-first --octal-permissions";
in {
config = {
environment = {
shellAliases = builtins.mapAttrs (_: v: "${v} ${ezaOptions}") {
l = "eza -alh";
ls = "eza";
ll = "eza -l";
};
systemPackages = [
pkgs.eza
];
};
};
}

20
hosts/shared/default.nix Normal file
View file

@ -0,0 +1,20 @@
{...}: {
imports = [
./fish.nix
./sddm.nix
./git.nix
./qutebrowser.nix
./pipewire.nix
./mpd.nix
./fonts.nix
./emacs.nix
./ssh.nix
./direnv.nix
./xonsh.nix
./aliases.nix
./libvirt.nix
./users.nix
./support.nix
./river.nix
];
}

23
hosts/shared/direnv.nix Normal file
View file

@ -0,0 +1,23 @@
{
config,
lib,
...
}: let
cfg = config.alqueva.direnv;
in {
options.alqueva.direnv = {
enable = lib.mkEnableOption "direnv";
};
config = lib.mkIf cfg.enable {
programs.direnv = {
enable = true;
silent = true;
nix-direnv.enable = true;
direnvrcExtra = ''
echo "direnv version: ${config.programs.direnv.package.version}"
echo "shell version: ${config.users.defaultUserShell.pname} ${config.users.defaultUserShell.version}"
'';
};
};
}

19
hosts/shared/emacs.nix Normal file
View file

@ -0,0 +1,19 @@
{
config,
pkgs,
lib,
inputs,
...
}: let
cfg = config.alqueva.emacs;
in {
options.alqueva.emacs = {
enable = lib.mkEnableOption "Emacs";
};
config = lib.mkIf cfg.enable {
environment = {
systemPackages = [inputs.pankomacs.packages.${pkgs.system}.pankomacs];
sessionVariables."EDITOR" = lib.mkDefault "emacs";
};
};
}

37
hosts/shared/fish.nix Normal file
View file

@ -0,0 +1,37 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.fish;
in {
options.alqueva.fish = {
enable = lib.mkEnableOption "fish";
};
config = lib.mkIf cfg.enable {
programs = {
fish = {
vendor = {
functions.enable = true;
config.enable = true;
completions.enable = true;
};
enable = true;
};
starship = {
enable = true;
presets = ["no-nerd-font"];
};
};
environment.systemPackages = builtins.attrValues {
inherit
(pkgs.fishPlugins)
fzf-fish
forgit
autopair
;
};
};
}

80
hosts/shared/fonts.nix Normal file
View file

@ -0,0 +1,80 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.fonts;
inherit (lib) types mkOption;
mkStringsOption = default: letterform:
mkOption {
type = types.listOf types.str;
inherit default;
description = "The default fonts for ${letterform}.";
};
mkPackagesOption = default: letterform:
mkOption {
type = types.listOf types.package;
inherit default;
description = "The packages you want to use for your ${letterform} fonts.";
};
in {
options.alqueva.fonts = {
enable = lib.mkEnableOption "" // {description = "Whether you want to use this fonts module.";};
packages =
{
extra = mkOption {
type = types.listOf types.package;
default = [];
description = "Extra font packages you want installed.";
};
}
// builtins.mapAttrs (_n: v: mkPackagesOption v.default v.letterform) {
sansSerif = {
default = [pkgs.roboto];
letterform = "sans-serif";
};
monospace = {
default = [pkgs.roboto-mono];
letterform = "monospace";
};
serif = {
default = [pkgs.roboto-serif];
letterform = "serif";
};
emoji = {
default = [pkgs.noto-fonts-color-emoji];
letterform = "emoji";
};
};
names = builtins.mapAttrs (_n: v: mkStringsOption v.default v.letterform) {
sansSerif = {
default = ["Roboto"];
letterform = "sans-serif";
};
monospace = {
default = ["Roboto Mono"];
letterform = "monospace";
};
serif = {
default = ["Roboto Serif"];
letterform = "serif";
};
emoji = {
default = ["Noto Color Emoji"];
letterform = "emoji";
};
};
};
config = lib.mkIf cfg.enable {
fonts = {
packages = builtins.concatLists (builtins.attrValues cfg.packages);
fontconfig = {
defaultFonts = {
inherit (cfg.names) sansSerif monospace serif emoji;
};
enable = true;
};
};
};
}

118
hosts/shared/git.nix Normal file
View file

@ -0,0 +1,118 @@
{
config,
lib,
...
}: let
cfg = config.alqueva.git;
in {
options.alqueva.git = {
enable = lib.mkEnableOption "git";
};
config = lib.mkIf cfg.enable {
programs.git = {
enable = true;
config = {
alias = {
a = "add";
aa = "add .";
aliases = "! f(){ TOP=$(expr $(grep -n \"^\\\\\\\\[alias\" /etc/gitconfig | sed -e 's|:.*||') + 1) && for LINE_NUMBER in $(grep -n \"^\\\\\\\\[\" /etc/gitconfig | sed -e 's|:.*||'); do [ $TOP -lt $LINE_NUMBER ] && BOTTOM=$(expr $LINE_NUMBER - 2 ) && break; done; sed -n \"\${TOP},\${BOTTOM}p\" /etc/gitconfig; }; f | sed -e 's|^ ||'";
ap = "add -p";
b = "! git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's|refs/heads/||'";
bD = "branch -D";
ba = "branch -a";
bc = "branch -c";
bd = "branch -d";
br = "branch -r";
c = "! git commit --verbose; git push";
ca = "! git c --amend";
cf = "! git commit --verbose; git push --force";
ch = "switch -C";
change = "switch -C";
cl = "clone";
cm = "commit -m";
co = "checkout "; # old/bad practice - switches branch and can modify worktree
cp = "cherry-pick ; usually abusive; sometimes necessary";
create = "! git bc";
d = "diff";
dc = "diff --cached";
ds = "diff --stat";
expire = "! git fsck --unreachable --dangling --no-reflogs; git reflog expire --expire=now --all; git gc --prune=now";
f = "fetch";
fe = "fetch";
filelog = "log --patch";
find = "! git ls-files | grep -i";
fl = "log --patch";
fp = "fetch --prune ; removes branches not in upstream";
gr = "grep -Ii";
grep = "grep -Ii";
greproot = "! git grr";
grr = "! f() { ROOT=$(git rev-parse --show-toplevel) && cd $ROOT && git grep --full-name -In $1 | xargs -I{} echo $ROOT/{}; }; f";
invert = "revert";
l = "log --oneline --graph --decorate --parents";
lasttag = "describe --tags --abbrev=0";
ll = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat";
lref = "log --oneline --graph --decorate --parents --reflog";
ls = "log --pretty=format:\"%C(yellow)%h\\\\ %ad%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --date=short";
lt = "describe --tags --abbrev=0";
mailmap = "! f(){ printf \\\"$(git config user.name) <$(git config user.email)> <\${1}>\\\" > mailmap; git filter-repo --force --mailmap mailmap; }; f";
one = "log -1 ; no input displays HEAD";
pd = "push -d";
pf = "push --force";
pl = "pull";
pp = "pull --prune ; removes branches not in upstream";
pr = "pull --rebase ; rebases commits onto upstream";
ps = "push";
pt = "! f(){ git push $1 tag $2; }; f";
r = "rebase";
ra = "rebase --skip";
rc = "rebase --continue";
re = "restore";
ref = "reflog";
ri = "rebase --interactive";
rm = "rm -r";
rmf = "! git rm --force";
rq = "rebase --quit";
rs = "rebase --abort";
sh = "show";
st = "status";
sw = "switch ; new checkout - only switching branch w/o restoring worktree";
sync = "! git fe upstream; git rebase upstream/main; git push";
t = "tag";
td = "tag --delete";
un = "restore --staged --worktree";
uncommit = "switch -C";
undo = "restore --staged --worktree";
undo-specific = "! f(){ git restore --source=\\\"$1\\\" $2; }; f";
undo-stage = "restore";
undo-unstaged = "restore";
undo-work = "restore --staged --worktree";
undo-wt = "restore --staged --worktree";
unstage = "restore --staged";
wa = "! f(){ git worktree add ../$1 $1; }; f";
wc = "! f(){ PROJ=$(printf $1 | sed -e 's|.*/||' | sed -e 's|.git||'); mkdir $PROJ; cd $PROJ; if git ls-remote $1 | grep -q \"main\"; then BRANCH=\"main\"; elif git ls-remote $1 | grep -q \"master\"; then BRANCH=\"master\"; elif git ls-remote $1 | grep -q \"trunk\"; then BRANCH=\"trunk\"; fi; git clone $1 $BRANCH; }; f";
wcreate = "! git wc";
wmv = "worktree move";
wnew = "! f(){ git worktree add ../$1; cd ../$1; git push --set-upstream origin $1; }; f";
wr = "worktree remove";
wrm = "! git wr";
wsc = "! f(){ PROJ=$(printf $1 | sed -e 's|.*/||' | sed -e 's|.git||'); mkdir $PROJ; cd $PROJ; if git ls-remote $1 | grep -q \"main\"; then BRANCH=\"main\"; elif git ls-remote $1 | grep -q \"master\"; then BRANCH=\"master\"; elif git ls-remote $1 | grep -q \"trunk\"; then BRANCH=\"trunk\"; fi; git clone --depth=1 --single-branch $1 $BRANCH; }; f";
wshallow = "! git wsc";
};
branch = {
autosetuprebase = "always";
};
color = {
branch = "auto";
diff = "auto";
status = "auto";
};
user = {
email = "balkenix@outlook.com";
name = "Artur Manuel";
signingKey = "~/.ssh/id_ed25519.pub";
};
};
};
};
}

22
hosts/shared/libvirt.nix Normal file
View file

@ -0,0 +1,22 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.alqueva.libvirt;
in {
options.alqueva.libvirt = {
enable = lib.mkEnableOption "libvirt";
};
config = lib.mkIf cfg.enable {
virtualisation.libvirtd = {
enable = true;
qemu.package = pkgs.qemu_kvm;
};
programs.virt-manager.enable = true;
networking.nftables.enable = true;
};
}

24
hosts/shared/mpd.nix Normal file
View file

@ -0,0 +1,24 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.mpd;
in {
options.alqueva.mpd = {
enable = lib.mkEnableOption "mpd";
ncmpcpp = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable ncmpcpp alongside mpd.";
};
};
config = lib.mkIf cfg.enable {
services.mpd.enable = true;
environment.systemPackages =
[pkgs.mpd]
++ lib.optional cfg.ncmpcpp pkgs.ncmpcpp;
};
}

26
hosts/shared/pipewire.nix Normal file
View file

@ -0,0 +1,26 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.pipewire;
in {
options.alqueva.pipewire = {
enable = lib.mkEnableOption "PipeWire";
};
config = lib.mkIf cfg.enable {
services.pipewire = {
enable = true;
alsa.enable = true;
jack.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
environment.systemPackages = [
pkgs.pwvucontrol
pkgs.helvum
];
};
}

View file

@ -0,0 +1,18 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.qutebrowser;
in {
options.alqueva.qutebrowser = {
enable = lib.mkEnableOption "qutebrowser";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [
pkgs.qutebrowser
];
};
}

38
hosts/shared/river.nix Normal file
View file

@ -0,0 +1,38 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.alqueva.river;
in {
options.alqueva.river = {
enable = lib.mkEnableOption "River";
};
config = lib.mkIf cfg.enable {
alqueva.support.wayland = true;
programs.river = {
enable = true;
xwayland.enable = false;
extraPackages = [
pkgs.wbg
pkgs.kanshi
];
};
xdg.portal.wlr = {
enable = true;
settings = {
screencast = {
output_name = "HDMI-A-1";
chooser_type = "simple";
chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or";
};
};
};
services.gnome.gnome-keyring.enable = true;
};
}

25
hosts/shared/sddm.nix Normal file
View file

@ -0,0 +1,25 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.sddm;
in {
options.alqueva.sddm = {
enable = lib.mkEnableOption "sddm";
};
config = lib.mkIf cfg.enable {
services.displayManager.sddm = {
wayland = {
enable = true;
compositor = "kwin";
};
enable = true;
theme = "where_is_my_sddm_theme";
};
environment.systemPackages = [
pkgs.i-found-my-sddm-theme
];
};
}

19
hosts/shared/ssh.nix Normal file
View file

@ -0,0 +1,19 @@
{
config,
lib,
...
}: let
cfg = config.alqueva.openssh;
in {
options.alqueva.openssh = {
enable = lib.mkEnableOption "OpenSSH";
};
config = lib.mkIf cfg.enable {
programs = {
ssh.enableAskPassword = true;
seahorse.enable = true;
};
services.openssh.enable = true;
};
}

46
hosts/shared/support.nix Normal file
View file

@ -0,0 +1,46 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.alqueva.support;
inherit (lib) mkEnableOption;
in {
options.alqueva.support = {
wayland = mkEnableOption "wayland support";
};
config = lib.mkIf cfg.wayland {
xdg.portal = {
enable = true;
config.common = {
default = [
"gtk"
"kde"
];
};
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-kde
];
};
environment = {
systemPackages = builtins.attrValues {
inherit
(pkgs)
slurp
grim
wf-recorder
fuzzel
kitty
wl-clipboard
;
};
sessionVariables = {
"NIXOS_OZONE_WL" = "1";
"QT_QPA_PLATFORM" = "wayland";
};
};
};
}

51
hosts/shared/users.nix Normal file
View file

@ -0,0 +1,51 @@
{
config,
lib,
...
}: let
inherit (lib) types mkOption;
createTmpfilesEntries = entries: builtins.attrValues (builtins.mapAttrs (dest: path: "L+ %h/${dest} - - - - ${path}") entries);
cfg = config.alqueva.users;
in {
options.alqueva.users = mkOption {
description = "Users to have on the system.";
default = {};
type = types.attrsOf (types.submodule {
options = {
tmpfiles = mkOption {
description = "tmpfiles";
type = types.attrsOf types.path;
default = {};
};
packages = mkOption {
type = types.listOf types.package;
default = [];
description = "Packages installed to the the defined user.";
};
groups = mkOption {
type = types.listOf types.str;
default = [];
description = "Groups to add the defined user to.";
};
};
});
};
config = {
users.users =
builtins.mapAttrs (user: ucfg: {
description = user;
isNormalUser = true;
extraGroups = ucfg.groups;
inherit (ucfg) packages;
shell = config.programs.xonsh.package;
})
cfg;
systemd.user.tmpfiles.users =
builtins.mapAttrs (_: ucfg: {
rules = createTmpfilesEntries ucfg.tmpfiles;
})
cfg;
};
}

50
hosts/shared/xonsh.nix Normal file
View file

@ -0,0 +1,50 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.alqueva.xonsh;
inherit (pkgs) fetchFromGitHub;
in {
options.alqueva.xonsh = {
enable = lib.mkEnableOption "xonsh";
};
config = lib.mkIf cfg.enable {
programs = {
xonsh = {
config =
"from xonsh.xontribs import get_xontribs\n"
+ lib.concatStringsSep "\n" (builtins.attrValues (builtins.mapAttrs (n: v: "aliases['${n}'] = '${v}'\n") config.environment.shellAliases))
+ ''
for xontrib in get_xontribs():
xontrib load @(xontrib)
execx($(zoxide init xonsh --cmd j), 'exec', __xonsh__.ctx, filename='zoxide')
'';
package = pkgs.xonsh.override {
extraPackages = ps: [
(let
name = "xontrib-fish-completer";
version = "0.0.1";
in
ps.buildPythonPackage {
inherit name version;
src = fetchFromGitHub {
owner = "xonsh";
repo = name;
rev = version;
hash = "sha256-PhhdZ3iLPDEIG9uDeR5ctJ9zz2+YORHBhbsiLrJckyA=";
};
})
];
};
enable = true;
};
};
environment.systemPackages = [
pkgs.zoxide
];
};
}