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

18
hosts/default.nix Normal file
View file

@ -0,0 +1,18 @@
{
inputs,
lib,
...
}: {
flake = {
nixosConfigurations = lib.mkHosts {
python = {
system = "x86_64-linux";
user = "artur";
extraModules = [
inputs.disko.nixosModules.disko
];
};
};
nixosModules.default = ./shared;
};
}

41
hosts/python/apps.nix Normal file
View file

@ -0,0 +1,41 @@
{
inputs,
pkgs,
...
}: {
environment = {
systemPackages = builtins.attrValues {
inherit
(pkgs)
nil
statix
deadnix
alejandra
;
neovim = inputs.painless-neovim.packages.${pkgs.system}.default;
};
sessionVariables = {EDITOR = "nvim";};
};
alqueva = {
mpd = {
enable = true;
ncmpcpp = true;
};
emacs.enable = true;
xonsh.enable = true;
libvirt.enable = true;
direnv.enable = true;
git.enable = true;
pipewire.enable = true;
qutebrowser.enable = true;
openssh.enable = true;
river.enable = true;
};
xdg.mime = {
enable = true;
defaultApplications = {
"text/html" = ["qutebrowser.desktop"];
};
};
}

View file

@ -0,0 +1,26 @@
[main]
font=monospace:size=15
use-bold=yes
icons-enabled=no
match-mode=fuzzy
anchor=center
lines=8
horizontal-pad=15
vertical-pad=15
[colors]
background=16161eff
text=c0caf5ff
match=2ac3deff
selection=343a55ff
selection-match=2ac3deff
selection-text=c0caf5ff
border=27a1b9ff
[border]
width=2
radius=0
[key-bindings]
cancel=Control+[
execute=Control+m

View file

@ -0,0 +1,3 @@
profile {
output HDMI-A-1 mode 1920x1080@100Hz
}

View file

@ -0,0 +1,50 @@
# vim:ft=kitty
## name: Tokyo Night
## license: MIT
## author: Folke Lemaitre
## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_night.conf
background #1a1b26
foreground #c0caf5
selection_background #283457
selection_foreground #c0caf5
url_color #73daca
cursor #c0caf5
cursor_text_color #1a1b26
# Tabs
active_tab_background #7aa2f7
active_tab_foreground #16161e
inactive_tab_background #292e42
inactive_tab_foreground #545c7e
#tab_bar_background #15161e
# Windows
active_border_color #7aa2f7
inactive_border_color #292e42
# normal
color0 #15161e
color1 #f7768e
color2 #9ece6a
color3 #e0af68
color4 #7aa2f7
color5 #bb9af7
color6 #7dcfff
color7 #a9b1d6
# bright
color8 #414868
color9 #f7768e
color10 #9ece6a
color11 #e0af68
color12 #7aa2f7
color13 #bb9af7
color14 #7dcfff
color15 #c0caf5
# extended colors
color16 #ff9e64
color17 #db4b4b

View file

@ -0,0 +1,14 @@
# BEGIN_KITTY_THEME
# Tokyo Night
include current-theme.conf
# END_KITTY_THEME
# BEGIN_KITTY_FONTS
font_family family='Source Code Pro' postscript_name=SourceCodePro-Regular
bold_font auto
italic_font auto
bold_italic_font auto
font_size 14.0
# END_KITTY_FONTS
window_padding_width 8

View file

@ -0,0 +1,4 @@
# BEGIN_KITTY_THEME
# Tokyo Night
include current-theme.conf
# END_KITTY_THEME

View file

@ -0,0 +1,2 @@
config.load_autoconfig()
config.set('colors.webpage.preferred_color_scheme', 'dark')

92
hosts/python/configs/river/init Executable file
View file

@ -0,0 +1,92 @@
#!/bin/sh
riverctl spawn kanshi
riverctl spawn "wbg ~/.local/share/wallpapers/04.png"
riverctl spawn "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
riverctl spawn "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
riverctl map normal Super+Shift Return spawn kitty
riverctl map normal Super P spawn fuzzel
riverctl map normal Super Q close
riverctl map normal Super+Shift E exit
riverctl map normal Super+Shift C spawn "~/.config/river/init"
riverctl map normal Super J focus-view next
riverctl map normal Super K focus-view previous
riverctl map normal Super+Shift J swap next
riverctl map normal Super+Shift K swap previous
riverctl map normal Super Period focus-output next
riverctl map normal Super Comma focus-output previous
riverctl map normal Super+Shift Period send-to-output next
riverctl map normal Super+Shift Comma send-to-output previous
riverctl map normal Super Return zoom
riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05"
riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05"
riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1"
riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1"
riverctl map normal Super+Alt H move left 100
riverctl map normal Super+Alt J move down 100
riverctl map normal Super+Alt K move up 100
riverctl map normal Super+Alt L move right 100
riverctl map normal Super+Alt+Control H snap left
riverctl map normal Super+Alt+Control J snap down
riverctl map normal Super+Alt+Control K snap up
riverctl map normal Super+Alt+Control L snap right
riverctl map normal Super+Alt+Shift H resize horizontal -100
riverctl map normal Super+Alt+Shift J resize vertical 100
riverctl map normal Super+Alt+Shift K resize vertical -100
riverctl map normal Super+Alt+Shift L resize horizontal 100
riverctl map-pointer normal Super BTN_LEFT move-view
riverctl map-pointer normal Super BTN_RIGHT resize-view
riverctl map-pointer normal Super BTN_MIDDLE toggle-float
for i in $(seq 1 9)
do
tags=$((1 << ($i - 1)))
riverctl map normal Super $i set-focused-tags $tags
riverctl map normal Super+Shift $i set-view-tags $tags
riverctl map normal Super+Control $i toggle-focused-tags $tags
riverctl map normal Super+Shift+Control $i toggle-view-tags $tags
done
all_tags=$(((1 << 32) - 1))
riverctl map normal Super 0 set-focused-tags $all_tags
riverctl map normal Super+Shift 0 set-view-tags $all_tags
riverctl map normal Super Space toggle-float
riverctl map normal Super F toggle-fullscreen
riverctl map normal Super Up send-layout-cmd rivertile "main-location top"
riverctl map normal Super Right send-layout-cmd rivertile "main-location right"
riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom"
riverctl map normal Super Left send-layout-cmd rivertile "main-location left"
riverctl declare-mode passthrough
riverctl map normal Super F11 enter-mode passthrough
riverctl map passthrough Super F11 enter-mode normal
for mode in normal locked
do
riverctl map $mode None XF86Eject spawn 'eject -T'
riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5'
riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5'
riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute'
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl set +5%'
riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl set 5%-'
done
# hacky way of making everything have borders
riverctl rule-add ssd
riverctl background-color 0x00000000
riverctl border-color-focused 0x27a1b9ff
riverctl border-color-unfocused 0x00000000
riverctl keyboard-layout "us"
riverctl set-repeat 50 300
riverctl xcursor-theme "BreezeX-RosePine-Linux"
riverctl default-layout rivertile
rivertile -view-padding 10 -outer-padding 10 &

46
hosts/python/default.nix Normal file
View file

@ -0,0 +1,46 @@
{pkgs, ...}: {
imports = [
./hardware.nix
./disks.nix
./theme.nix
./apps.nix
./users.nix
./fonts.nix
];
config = {
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
services = {
xserver.xkb = {
layout = "us";
options = "eurosign:e,ctrl:nocaps";
};
udev.packages = [
pkgs.android-udev-rules
];
libinput.enable = true;
openssh.enable = true;
};
hardware.graphics = {
enable = true;
enable32Bit = false;
};
networking.networkmanager.enable = true;
time.timeZone = "Europe/London";
i18n.defaultLocale = "nl_NL.UTF-8";
system.stateVersion = "24.11";
};
}

67
hosts/python/disks.nix Normal file
View file

@ -0,0 +1,67 @@
{
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/disk/by-id/nvme-WDC_PC_SN520_SDAPNUW-256G-1014_20270F804683";
content = {
type = "gpt";
partitions = {
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = ["defaults"];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "utero";
passwordFile = "/tmp/secret.key"; # Interactive
settings = {
allowDiscards = true;
};
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"/@root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"/@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"/@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"/@swap" = {
mountpoint = "/.swapvol";
swap.swapfile.size = "8G";
};
};
};
};
};
};
};
};
};
};
}

21
hosts/python/fonts.nix Normal file
View file

@ -0,0 +1,21 @@
{pkgs, ...}: {
alqueva.fonts = {
names = {
sansSerif = ["Source Sans Pro"];
monospace = ["Source Code Pro"];
serif = ["Source Serif Pro"];
emoji = ["OpenMoji Color"];
};
packages = {
sansSerif = [pkgs.source-sans-pro];
monospace = [pkgs.source-code-pro];
serif = [pkgs.source-serif-pro];
emoji = [pkgs.openmoji-color];
extra = [
pkgs.source-han-sans
(pkgs.nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];})
];
};
enable = true;
};
}

28
hosts/python/hardware.nix Normal file
View file

@ -0,0 +1,28 @@
# 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,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
# 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.enp8s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

41
hosts/python/theme.nix Normal file
View file

@ -0,0 +1,41 @@
{
pkgs,
lib,
...
}: {
programs.dconf = {
profiles.user.databases = [
{
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
cursor-size = lib.gvariant.mkUint32 24;
cursor-theme = "Simp1e-Tokyo-Night";
icon-theme = "Tela-circle-purple-dark";
gtk-theme = "Tokyonight-dark";
};
};
}
];
enable = true;
};
qt = {
enable = true;
style = "kvantum";
};
environment.systemPackages = builtins.attrValues {
gtk-theme = pkgs.tokyonight-gtk-theme;
icon-theme = pkgs.tela-circle-icon-theme.override {
colorVariants = ["purple"];
circularFolder = true;
};
cursor-theme = pkgs.simp1e-cursors;
};
systemd.user.tmpfiles.rules = [
"L+ %h/.config/gtk-4.0/gtk.css - - - - ${pkgs.tokyonight-gtk-theme}/share/themes/Tokyonight-Dark/gtk-4.0/gtk.css"
"L+ %h/.config/gtk-4.0/gtk-dark.css - - - - ${pkgs.tokyonight-gtk-theme}/share/themes/Tokyonight-Dark/gtk-4.0/gtk-dark.css"
];
}

38
hosts/python/users.nix Normal file
View file

@ -0,0 +1,38 @@
{
inputs,
pkgs,
...
}: {
alqueva.users.artur = {
tmpfiles = {
".config/qutebrowser/config.py" = ./configs/qutebrowser/config.py;
".config/kanshi/" = ./configs/kanshi;
".config/fuzzel/" = ./configs/fuzzel;
".config/river/" = ./configs/river;
".config/kitty/" = ./configs/kitty;
".local/share/wallpapers" = "${inputs.wallpkgs.packages.${pkgs.system}.tokyo_night}/share/wallpapers/tokyo_night";
};
packages = builtins.attrValues {
inherit
(pkgs)
wget
vesktop
mpv
imv
amberol
fractal
nicotine-plus
nautilus
librewolf
;
};
groups = [
"wheel"
"video"
"audio"
"networkmanager"
"input"
"libvirtd"
];
};
}

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
];
};
}