Compare commits
10 Commits
60b70c23d2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e5316761c | ||
|
|
d98c64bc11 | ||
|
|
e6a35ee756 | ||
|
|
d3f6e79b85 | ||
|
|
320570979e | ||
|
|
bc2da33ca9 | ||
|
|
287648124c | ||
|
|
0c04a03e26 | ||
|
|
73837c71cb | ||
|
|
50b5c2908c |
@@ -13,7 +13,7 @@
|
|||||||
programs.dconf.enable = true;
|
programs.dconf.enable = true;
|
||||||
|
|
||||||
# set root user pwd
|
# set root user pwd
|
||||||
users.users.root.password = "changeme";
|
#users.users.root.password = "changeme";
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "Europe/Vienna";
|
time.timeZone = "Europe/Vienna";
|
||||||
@@ -40,6 +40,13 @@
|
|||||||
|
|
||||||
services.openssh.settings.GatewayPorts = "clientspecified";
|
services.openssh.settings.GatewayPorts = "clientspecified";
|
||||||
|
|
||||||
|
# add extre nix registries
|
||||||
|
nix.registry = {
|
||||||
|
ni.flake = inputs.nixpkgs;
|
||||||
|
nu.flake = inputs.nixpkgs-unstable;
|
||||||
|
me.flake = self;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
|
|||||||
@@ -8,21 +8,64 @@
|
|||||||
# - win + D command
|
# - win + D command
|
||||||
# - kernel output for luks pwd on all displays
|
# - kernel output for luks pwd on all displays
|
||||||
|
|
||||||
{ lib, pkgs, nur, unstable, ... }: {
|
{ lib, pkgs, nur, unstable, inputs, ... }:
|
||||||
|
let
|
||||||
|
|
||||||
|
newerUnstableSrc = builtins.getFlake "nixpkgs/d0fc30899600b9b3466ddb260fd83deb486c32f1";
|
||||||
|
newerUnstable = import newerUnstableSrc.outPath {};
|
||||||
|
|
||||||
|
mySway = newerUnstable.sway;
|
||||||
|
myOtherSway = newerUnstable.sway.override {
|
||||||
|
sway-unwrapped = (newerUnstable.sway-unwrapped.overrideAttrs (prev: {
|
||||||
|
/*
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "WillPower3309";
|
||||||
|
repo = "swayfx";
|
||||||
|
rev = "";
|
||||||
|
hash = "";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "swaywm";
|
||||||
|
repo = "sway";
|
||||||
|
rev = "73c244fb4807a29c6599d42c15e8a8759225b2d6";
|
||||||
|
hash = "sha256-P2w1oRVUNBWajt8jZOxPXvBE29urbrhtORy+lfYqnF8=";
|
||||||
|
};
|
||||||
|
})).override {
|
||||||
|
wlroots = newerUnstable.wlroots.overrideAttrs (prev: {
|
||||||
|
nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs.cmake pkgs.libdrm pkgs.pkg-config pkgs.wayland ];
|
||||||
|
buildInputs = prev.nativeBuildInputs ++ [ pkgs.cmake pkgs.libdrm pkgs.pkg-config pkgs.wayland ];
|
||||||
|
version = "master";
|
||||||
|
src = pkgs.fetchFromGitLab {
|
||||||
|
domain = "gitlab.freedesktop.org";
|
||||||
|
owner = "wlroots";
|
||||||
|
repo = "wlroots";
|
||||||
|
rev = "2c64b30a6750d5e585c00c4c116f415bac33d18f";
|
||||||
|
sha256 = "sha256-Hxf3xVJddSlSHytYJNNq7f2oQdiSXp0tmK1FepRpqaA=";
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
|
||||||
|
# aparently also needed for wayland... or not idk
|
||||||
|
services.xserver.xkb.layout = "de";
|
||||||
|
|
||||||
|
|
||||||
services.greetd = {
|
services.greetd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = rec {
|
settings = rec {
|
||||||
initial_session = {
|
initial_session = {
|
||||||
#command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time -d --env WLR_RENDERER_ALLOW_SOFTWARE=1 --cmd sway";
|
#command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time -d --env WLR_RENDERER_ALLOW_SOFTWARE=1 --cmd sway";
|
||||||
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${pkgs.writeScriptBin "run-sway" ''
|
command = "${pkgs.writeScriptBin "run-sway" ''
|
||||||
export WLR_RENDERER_ALLOW_SOFTWARE=1
|
export WLR_RENDERER_ALLOW_SOFTWARE=1
|
||||||
export SDL_VIDEODRIVER=wayland
|
export SDL_VIDEODRIVER=wayland
|
||||||
export _JAVA_AWT_WM_NONREPARENTING=1
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
export QT_QPA_PLATFORM=wayland
|
export QT_QPA_PLATFORM=wayland
|
||||||
export XDG_CURRENT_DESKTOP=sway
|
export XDG_CURRENT_DESKTOP=sway
|
||||||
export XDG_SESSION_DESKTOP=sway
|
export XDG_SESSION_DESKTOP=sway
|
||||||
exec sway
|
exec ${pkgs.lib.getExe mySway}
|
||||||
''}/bin/run-sway";
|
''}/bin/run-sway";
|
||||||
user = "me";
|
user = "me";
|
||||||
};
|
};
|
||||||
@@ -30,6 +73,32 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.user.services.xdg-desktop-portal-wlr.serviceConfig.ExecStart = let
|
||||||
|
settingsFormat = pkgs.formats.ini { };
|
||||||
|
configFile = settingsFormat.generate "xdg-desktop-portal-wlr.ini" {
|
||||||
|
screencast = {
|
||||||
|
output_name = "eDP-1";
|
||||||
|
|
||||||
|
# to make streaming of individual windows work
|
||||||
|
chooser_type = "dmenu";
|
||||||
|
chooser_cmd = "${lib.getExe pkgs.bemenu}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
package = pkgs.xdg-desktop-portal-wlr.overrideAttrs (prev: {
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "emersion";
|
||||||
|
repo = "xdg-desktop-portal-wlr";
|
||||||
|
rev = "b3703cceea485972b139c22342bdc2ed7b80c1c2";
|
||||||
|
sha256 = "sha256-nFAp/9ofRH4kIFgg2SjzZNXYu8r0BBjO5VPFc3jKeas=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
in [
|
||||||
|
# Empty ExecStart value to override the field
|
||||||
|
""
|
||||||
|
"${package}/libexec/xdg-desktop-portal-wlr --config=${configFile}"
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -48,40 +117,31 @@
|
|||||||
default = "wlr";
|
default = "wlr";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
wlr.enable = true;
|
extraPortals = [
|
||||||
wlr.settings.screencast = {
|
pkgs.xdg-desktop-portal-gtk
|
||||||
output_name = "eDP-1";
|
pkgs.xdg-desktop-portal-wlr
|
||||||
chooser_type = "simple";
|
];
|
||||||
chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or";
|
|
||||||
};
|
|
||||||
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fonts.packages = with pkgs; [
|
fonts.packages = with pkgs; [
|
||||||
(nerdfonts.override {fonts = ["Hack"];})
|
nerd-fonts.hack
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.users.me.services.swayosd.enable = true;
|
home-manager.users.me.services.swayosd.enable = true;
|
||||||
services.blueman.enable = true;
|
services.blueman.enable = true;
|
||||||
hardware.bluetooth.enable = true;
|
hardware.bluetooth.enable = true;
|
||||||
|
|
||||||
services.keyd = {
|
|
||||||
enable = true;
|
|
||||||
keyboards.default.settings = {
|
|
||||||
main = {
|
|
||||||
leftalt = "leftcontrol";
|
|
||||||
leftcontrol = "leftalt";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# flameshot where clipboard works with wayland
|
# flameshot where clipboard works with wayland
|
||||||
|
# i am not even using flameshot anymore....
|
||||||
|
/*
|
||||||
(flameshot.overrideAttrs (prev: {
|
(flameshot.overrideAttrs (prev: {
|
||||||
nativeBuildInputs = prev.nativeBuildInputs or [] ++ [ libsForQt5.kguiaddons ];
|
nativeBuildInputs = prev.nativeBuildInputs or [] ++ [ libsForQt5.kguiaddons ];
|
||||||
cmakeFlags = prev.nativeBuildInputs or [] ++ [ "-DUSE_WAYLAND_CLIPBOARD=true" "-DUSE_WAYLAND_GRIM=ON" ];
|
cmakeFlags = prev.nativeBuildInputs or [] ++ [ "-DUSE_WAYLAND_CLIPBOARD=true" "-DUSE_WAYLAND_GRIM=ON" ];
|
||||||
patches = prev.patches or [] ++ [ ../overlays/patches/flameshot-wayland.patch ];
|
patches = prev.patches or [] ++ [ ../overlays/patches/flameshot-wayland.patch ];
|
||||||
}))
|
}))
|
||||||
|
*/
|
||||||
|
|
||||||
hyprpicker
|
hyprpicker
|
||||||
satty
|
satty
|
||||||
@@ -105,11 +165,13 @@
|
|||||||
}))
|
}))
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
sway
|
||||||
|
bemenu
|
||||||
|
|
||||||
xdg-desktop-portal
|
xdg-desktop-portal
|
||||||
wlr-randr
|
wlr-randr
|
||||||
rofi-wayland
|
rofi
|
||||||
wev
|
wev
|
||||||
swayfx
|
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
zoxide
|
zoxide
|
||||||
|
|
||||||
@@ -196,10 +258,28 @@
|
|||||||
output * scale 1 bg #121212 solid_color
|
output * scale 1 bg #121212 solid_color
|
||||||
|
|
||||||
#################### from nwg-display
|
#################### from nwg-display
|
||||||
# Generated by nwg-displays on 2025-07-09 at 20:13:34. Do not edit manually.
|
# Generated by nwg-displays on 2025-10-20 at 18:16:29. Do not edit manually.
|
||||||
|
|
||||||
|
output "DP-1" {
|
||||||
|
mode 3840x2160@59.997Hz
|
||||||
|
pos 3840 0
|
||||||
|
transform normal
|
||||||
|
scale 1.0
|
||||||
|
scale_filter nearest
|
||||||
|
adaptive_sync off
|
||||||
|
dpms on
|
||||||
|
}
|
||||||
output "eDP-1" {
|
output "eDP-1" {
|
||||||
mode 1920x1080@60.001Hz
|
mode 1920x1080@60.001Hz
|
||||||
|
pos 1920 1080
|
||||||
|
transform normal
|
||||||
|
scale 1.0
|
||||||
|
scale_filter nearest
|
||||||
|
adaptive_sync off
|
||||||
|
dpms on
|
||||||
|
}
|
||||||
|
output "HDMI-A-1" {
|
||||||
|
mode 1920x1080@60.0Hz
|
||||||
pos 0 1080
|
pos 0 1080
|
||||||
transform normal
|
transform normal
|
||||||
scale 1.0
|
scale 1.0
|
||||||
@@ -207,16 +287,6 @@
|
|||||||
adaptive_sync off
|
adaptive_sync off
|
||||||
dpms on
|
dpms on
|
||||||
}
|
}
|
||||||
output "DP-1" {
|
|
||||||
mode 3840x2160@59.997Hz
|
|
||||||
pos 1920 0
|
|
||||||
transform normal
|
|
||||||
scale 1.0
|
|
||||||
scale_filter nearest
|
|
||||||
adaptive_sync off
|
|
||||||
dpms on
|
|
||||||
}
|
|
||||||
output "DP-2" disable
|
|
||||||
#################### end from nwg-display
|
#################### end from nwg-display
|
||||||
|
|
||||||
set $disp2 "DP-1"
|
set $disp2 "DP-1"
|
||||||
@@ -250,6 +320,10 @@
|
|||||||
pointer_accel -0.5
|
pointer_accel -0.5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# the lan-mouse input
|
||||||
|
#input 0:0:wlr_virtual_pointer_v1 {
|
||||||
|
#}
|
||||||
|
|
||||||
### Border colors and looks
|
### Border colors and looks
|
||||||
client.focused #ff4060 #222222 #ff4060 #ff4060 #ff4060
|
client.focused #ff4060 #222222 #ff4060 #ff4060 #ff4060
|
||||||
client.focused_inactive #222222 #222222 #ff4060 #222222 #222222
|
client.focused_inactive #222222 #222222 #ff4060 #222222 #222222
|
||||||
@@ -263,6 +337,7 @@
|
|||||||
|
|
||||||
#exec "/usr/bin/env bash ${./..}/scripts/idlescript" # Manages suspending and locking
|
#exec "/usr/bin/env bash ${./..}/scripts/idlescript" # Manages suspending and locking
|
||||||
exec ${pkgs.bash}/bin/bash ${./..}/scripts/batteryscript.sh # Sends battery notifications when necessary
|
exec ${pkgs.bash}/bin/bash ${./..}/scripts/batteryscript.sh # Sends battery notifications when necessary
|
||||||
|
exec tmux # create a tmux session in which one can run commands that need WAYLAND_DISPLAY set
|
||||||
exec nm-applet # Networkmanager applet
|
exec nm-applet # Networkmanager applet
|
||||||
exec blueman-applet # Bluetoothmanager applet
|
exec blueman-applet # Bluetoothmanager applet
|
||||||
exec blueman-tray # Bluetoothmanager tray icon
|
exec blueman-tray # Bluetoothmanager tray icon
|
||||||
@@ -285,8 +360,12 @@
|
|||||||
|
|
||||||
|
|
||||||
### Key bindings
|
### Key bindings
|
||||||
#bindsym Mod4+Shift+Return exec $term
|
# QuickLaunch
|
||||||
bindsym $mod exec alacritty
|
bindsym $mod+i mode "QuickLaunch"
|
||||||
|
mode QuickLaunch {
|
||||||
|
bindsym $mod+f exec alacritty; mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
bindsym --locked $mod+d exec wlr-randr --output eDP-1 --on
|
bindsym --locked $mod+d exec wlr-randr --output eDP-1 --on
|
||||||
bindsym --locked $mod+Shift+d exec wlr-randr --output eDP-1 --off
|
bindsym --locked $mod+Shift+d exec wlr-randr --output eDP-1 --off
|
||||||
@@ -305,7 +384,23 @@
|
|||||||
#resume 'swaymsg "output * dpms on"' \
|
#resume 'swaymsg "output * dpms on"' \
|
||||||
#before-sleep 'swaylock -f -c 000000 -i $lock_bg'
|
#before-sleep 'swaylock -f -c 000000 -i $lock_bg'
|
||||||
|
|
||||||
bindsym $mod+Shift+s exec "${./..}/scripts/screenshot.sh"
|
bindsym $mod+Shift+s exec "${
|
||||||
|
let
|
||||||
|
innerScript = pkgs.writeScript "screenshot-inner" ''
|
||||||
|
geometry=$(slurp -c "#ff0000ff")
|
||||||
|
|
||||||
|
if [[ "$?" != "0" ]]
|
||||||
|
then
|
||||||
|
pkill wayfreeze || true
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
grim -g "$geometry" -t ppm - | satty --filename - --copy-command=wl-copy --early-exit &
|
||||||
|
|
||||||
|
pkill wayfreeze || true
|
||||||
|
'';
|
||||||
|
in "${pkgs.wayfreeze}/bin/wayfreeze --after-freeze-cmd ${innerScript}"
|
||||||
|
}"
|
||||||
|
|
||||||
bindsym $mod+p exec $menu -show combi -combi-modes "ssh,run"
|
bindsym $mod+p exec $menu -show combi -combi-modes "ssh,run"
|
||||||
|
|
||||||
@@ -379,10 +474,11 @@
|
|||||||
# default display outputs for workspaces with fallback to disp1
|
# default display outputs for workspaces with fallback to disp1
|
||||||
workspace 1 output $disp2 $disp1
|
workspace 1 output $disp2 $disp1
|
||||||
workspace 6 output $disp2 $disp1
|
workspace 6 output $disp2 $disp1
|
||||||
|
workspace 4 output $disp2 $disp1
|
||||||
workspace 8 output $disp2 $disp1
|
workspace 8 output $disp2 $disp1
|
||||||
workspace 9 output $disp2 $disp1
|
workspace 9 output $disp2 $disp1
|
||||||
workspace 7 output eDP-1
|
workspace 7 output eDP-1
|
||||||
workspace 0 output HEADLESS-1
|
workspace 0 output eDP-1
|
||||||
|
|
||||||
workspace_auto_back_and_forth false
|
workspace_auto_back_and_forth false
|
||||||
focus_wrapping workspace
|
focus_wrapping workspace
|
||||||
@@ -426,14 +522,14 @@
|
|||||||
bindsym $mod+m mode ChangeWorkroom
|
bindsym $mod+m mode ChangeWorkroom
|
||||||
|
|
||||||
############################# Fx stuff:
|
############################# Fx stuff:
|
||||||
blur disable
|
#blur disable
|
||||||
blur_passes 0
|
#blur_passes 0
|
||||||
blur_radius 1
|
#blur_radius 1
|
||||||
blur_noise 0
|
#blur_noise 0
|
||||||
blur_brightness 1
|
#blur_brightness 1
|
||||||
|
|
||||||
corner_radius 12
|
#corner_radius 12
|
||||||
default_dim_inactive 0.15
|
#default_dim_inactive 0.15
|
||||||
|
|
||||||
# Layout stuff:
|
# Layout stuff:
|
||||||
gaps inner 2
|
gaps inner 2
|
||||||
@@ -444,7 +540,7 @@
|
|||||||
#smart_gaps on
|
#smart_gaps on
|
||||||
|
|
||||||
default_border pixel 2
|
default_border pixel 2
|
||||||
corner_radius 0
|
#corner_radius 0
|
||||||
# disable_titlebar yes
|
# disable_titlebar yes
|
||||||
floating_modifier $mod normal
|
floating_modifier $mod normal
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# excluding for example my phone phone
|
# excluding for example my phone phone
|
||||||
|
|
||||||
{
|
{
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
##system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
|
||||||
# Select internationalisation properties.
|
# Select internationalisation properties.
|
||||||
@@ -24,9 +24,7 @@
|
|||||||
# the hosts file
|
# the hosts file
|
||||||
networking.extraHosts = ''
|
networking.extraHosts = ''
|
||||||
${builtins.readFile "${self}/misc/my-hosts"}
|
${builtins.readFile "${self}/misc/my-hosts"}
|
||||||
${builtins.readFile "${self}/misc/my-hosts-me"}
|
${builtins.readFile "${self}/misc/my-hosts-t"}
|
||||||
'';
|
'';
|
||||||
environment.etc.current_hosts.text = builtins.readFile "${self}/misc/my-hosts-me";
|
|
||||||
environment.etc.current_hosts.mode = "rw";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3159
flake.lock
generated
3159
flake.lock
generated
File diff suppressed because it is too large
Load Diff
266
flake.nix
266
flake.nix
@@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
################################### INPUTS #########################################
|
################################### INPUTS #########################################
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/release-24.11";
|
nixpkgs.url = "github:NixOS/nixpkgs/release-25.05";
|
||||||
#nixpkgs.url = "github:NixOS/nixpkgs/b9562c824b11473587286eb499680129c2d0d4f1";
|
|
||||||
#nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
#nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
nixpkgs-new.url = "github:NixOS/nixpkgs/release-25.11";
|
||||||
|
|
||||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-old.url = "github:NixOS/nixpkgs/release-23.11";
|
nixpkgs-old.url = "github:NixOS/nixpkgs/release-23.11";
|
||||||
|
|
||||||
@@ -19,12 +20,36 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
zed.url = "github:zed-industries/zed";
|
||||||
|
#zed.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
hetzner_ddns = {
|
||||||
|
url = "github:c2vi/hetzner_ddns";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/release-24.11";
|
url = "github:nix-community/home-manager/release-25.05";
|
||||||
#url = "github:nix-community/home-manager/release-24.05";
|
#url = "github:nix-community/home-manager/release-24.05";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
compass = {
|
||||||
|
url = "github:ppc-social/compass";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
elephant = {
|
||||||
|
url = "github:abenz1267/elephant";
|
||||||
|
#inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
walker = {
|
||||||
|
url = "github:abenz1267/walker";
|
||||||
|
inputs.elephant.follows = "elephant";
|
||||||
|
#inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
home-manager-old = {
|
home-manager-old = {
|
||||||
url = "github:nix-community/home-manager/release-23.11";
|
url = "github:nix-community/home-manager/release-23.11";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -32,6 +57,11 @@
|
|||||||
|
|
||||||
nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
|
nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
|
||||||
|
|
||||||
|
arion = {
|
||||||
|
url = "github:hercules-ci/arion";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
nix-index-database.url = "github:Mic92/nix-index-database";
|
nix-index-database.url = "github:Mic92/nix-index-database";
|
||||||
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
|
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
@@ -46,22 +76,27 @@
|
|||||||
|
|
||||||
lan-mouse.url = "github:feschber/lan-mouse";
|
lan-mouse.url = "github:feschber/lan-mouse";
|
||||||
|
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko/latest";
|
||||||
|
#inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
robotnix = {
|
robotnix = {
|
||||||
#url = "github:nix-community/robotnix";
|
#url = "github:nix-community/robotnix";
|
||||||
url = "github:c2vi/robotnix";
|
url = "github:c2vi/robotnix";
|
||||||
#inputs.nixpkgs.follows = "nixpkgs";
|
#inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# use fork see: https://github.com/nix-community/nix-on-droid/pull/203#issuecomment-2956162178
|
||||||
nix-on-droid = {
|
nix-on-droid = {
|
||||||
url = "github:nix-community/nix-on-droid/release-23.05";
|
url = "github:frankitox/nix-on-droid/supervisord";
|
||||||
#url = "github:zhaofengli/nix-on-droid";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.home-manager.follows = "home-manager";
|
inputs.home-manager.follows = "home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
# for bootstrap zip ball creation and proot-termux builds, we use a fixed version of nixpkgs to ease maintanence.
|
# for bootstrap zip ball creation and proot-termux builds, we use a fixed version of nixpkgs to ease maintanence.
|
||||||
# head of nixos-23.05 as of 2023-06-18
|
# head of nixos-23.05 as of 2023-06-18
|
||||||
# note: when updating nixpkgs-for-bootstrap, update store paths of proot-termux in modules/environment/login/default.nix
|
# note: when updating nixpkgs-for-bootstrap, update store paths of proot-termux in modules/environment/login/default.nix
|
||||||
nixpkgs-for-bootstrap.url = "github:NixOS/nixpkgs/c7ff1b9b95620ce8728c0d7bd501c458e6da9e04";
|
nixpkgs-for-nix-on-droid-bootstrap.url = "github:NixOS/nixpkgs/49ee0e94463abada1de470c9c07bfc12b36dcf40";
|
||||||
|
|
||||||
nix-wsl.url = "github:nix-community/NixOS-WSL";
|
nix-wsl.url = "github:nix-community/NixOS-WSL";
|
||||||
|
|
||||||
@@ -105,6 +140,7 @@
|
|||||||
workDir = "/home/me/work";
|
workDir = "/home/me/work";
|
||||||
secretsDir = "/home/me/secrets";
|
secretsDir = "/home/me/secrets";
|
||||||
persistentDir = "/home/me/work/app-data";
|
persistentDir = "/home/me/work/app-data";
|
||||||
|
dataDir = "/home/server/host";
|
||||||
|
|
||||||
tunepkgs = import nixpkgs {
|
tunepkgs = import nixpkgs {
|
||||||
|
|
||||||
@@ -145,7 +181,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit inputs confDir workDir secretsDir persistentDir self tunepkgs unstable nur pkgsUnstable;
|
inherit inputs confDir workDir secretsDir persistentDir self tunepkgs unstable nur pkgsUnstable dataDir;
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
pkgs = mypkgs;
|
pkgs = mypkgs;
|
||||||
};
|
};
|
||||||
@@ -178,9 +214,16 @@
|
|||||||
overlays = [ (import ./overlays/static-overlay.nix) (import ./overlays/my-overlay.nix) ];
|
overlays = [ (import ./overlays/static-overlay.nix) (import ./overlays/my-overlay.nix) ];
|
||||||
};
|
};
|
||||||
|
|
||||||
acern = self.nixosConfigurations.acern.config.system.build.tarballBuilder;
|
nod = (mypkgs.callPackage ./mods/nix-on-droid-pkgs.nix {
|
||||||
lush = self.nixosConfigurations.lush.config.system.build.sdImage;
|
system = "aarch64-linux";
|
||||||
rpi = self.nixosConfigurations.rpi.config.system.build.sdImage;
|
_nativeSystem = "x86_64-linux";
|
||||||
|
nix-on-droid-flake = inputs.nix-on-droid;
|
||||||
|
nixpkgs = inputs.nixpkgs-for-nix-on-droid-bootstrap;
|
||||||
|
nixOnDroidChannelURL = "${inputs.nix-on-droid}";
|
||||||
|
nixpkgsChannelURL = "${inputs.nixpkgs-for-nix-on-droid-bootstrap}";
|
||||||
|
home-manager-flake = inputs.home-manager-old;
|
||||||
|
#nixOnDroidFlakeURL = inputs.nix-on-droid.
|
||||||
|
}).customPkgs.bootstrapZip;
|
||||||
|
|
||||||
# collection of only my nur pkgs
|
# collection of only my nur pkgs
|
||||||
# my nur is unstable by default
|
# my nur is unstable by default
|
||||||
@@ -235,7 +278,119 @@
|
|||||||
|
|
||||||
############ apps ################
|
############ apps ################
|
||||||
apps = {
|
apps = {
|
||||||
test = inputs.nix-on-droid.outputs.apps.x86_64-linux.deploy;
|
flash = let
|
||||||
|
|
||||||
|
# echo the disks which will be flashed...
|
||||||
|
diskListing = hostname: let
|
||||||
|
list = mypkgs.lib.attrsets.mapAttrsToList (name: value: "echo flashing disk ${name} onto device ${value.device}") self.nixosConfigurations.${hostname}.config.disko.devices.disk;
|
||||||
|
string = mypkgs.lib.strings.concatStringsSep "\n" list;
|
||||||
|
in string;
|
||||||
|
|
||||||
|
diskDefinitionsList = hostname: let
|
||||||
|
list = mypkgs.lib.attrsets.mapAttrsToList (name: value: "diskDefinitions[${name}]=${value.device}") self.nixosConfigurations.${hostname}.config.disko.devices.disk;
|
||||||
|
string = mypkgs.lib.strings.concatStringsSep "\n" list;
|
||||||
|
in string;
|
||||||
|
|
||||||
|
createFlashScript = hostname: {
|
||||||
|
type = "app";
|
||||||
|
program = "${mypkgs.writeShellScriptBin "flash-te" ''
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
echo flashing for host ${hostname}
|
||||||
|
${diskListing hostname}
|
||||||
|
|
||||||
|
declare -A diskDefinitions
|
||||||
|
${diskDefinitionsList hostname}
|
||||||
|
|
||||||
|
|
||||||
|
# default value if no --mode provided
|
||||||
|
MODE="format"
|
||||||
|
ARGS=()
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--) # end of options; take remaining args as-is
|
||||||
|
shift
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
ARGS+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
--mode=*) # --mode=VALUE
|
||||||
|
MODE="''${1#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--mode) # --mode VALUE
|
||||||
|
if [[ $# -lt 2 ]]; then
|
||||||
|
echo "Error: --mode requires a value" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
MODE="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--do-flash)
|
||||||
|
DO_FLASH=yes
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
--efi-vars)
|
||||||
|
ARGS+=("--write-efi-boot-entries") # all other args preserved
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
ARGS+=("--help") # all other args preserved
|
||||||
|
DO_FLASH=yes
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
--disk) # --mode VALUE
|
||||||
|
if [[ $# -lt 3 ]]; then
|
||||||
|
echo "Error: --disk requires two values" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
diskname="$2"
|
||||||
|
diskval="$3"
|
||||||
|
diskDefinitions["$diskname"]="$diskval"
|
||||||
|
shift 3
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ARGS+=("$1") # all other args preserved
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# generate arg string from diskDefinitions
|
||||||
|
diskDefinitionString=""
|
||||||
|
for i in "''${!diskDefinitions[@]}"
|
||||||
|
do
|
||||||
|
diskDefinitionString="$diskDefinitionString --disk $i ''${diskDefinitions[$i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
echo would run: sudo -E ${inputs.disko.packages.x86_64-linux.disko-install}/bin/disko-install --mode $MODE --flake ${self}#${hostname} $diskDefinitionString ''${ARGS[@]}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $DO_FLASH != "yes" ]]
|
||||||
|
then
|
||||||
|
echo type yes to continue...
|
||||||
|
read acc
|
||||||
|
if [[ "$acc" != "yes" ]]
|
||||||
|
then
|
||||||
|
echo aborting...
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo flashing...
|
||||||
|
sudo -E ${inputs.disko.packages.x86_64-linux.disko-install}/bin/disko-install --mode $MODE --flake ${self}#${hostname} $diskDefinitionString ''${ARGS[@]}
|
||||||
|
''}/bin/flash-te";
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
te = createFlashScript "te";
|
||||||
|
ki = createFlashScript "ki";
|
||||||
|
fasu = createFlashScript "fasu";
|
||||||
|
};
|
||||||
|
|
||||||
wsl = {
|
wsl = {
|
||||||
type = "app";
|
type = "app";
|
||||||
@@ -301,6 +456,46 @@
|
|||||||
|
|
||||||
############ nixosConfigurations ################
|
############ nixosConfigurations ################
|
||||||
nixosConfigurations = rec {
|
nixosConfigurations = rec {
|
||||||
|
"_lsp_dummp" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit specialArgs;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
|
inputs.arion.nixosModules.arion
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
|
||||||
|
# other overlay and home manager module access
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
# overlay for nix vscode extensions to appear in packages
|
||||||
|
#nix-vscode-extensions.overlays.default
|
||||||
|
];
|
||||||
|
# a dummy user to expose home-manager modules
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
home-manager.extraSpecialArgs = {
|
||||||
|
inherit self;
|
||||||
|
};
|
||||||
|
users.users._lsp_dummy_user = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "dummy";
|
||||||
|
};
|
||||||
|
# the user is managed by home-manager
|
||||||
|
home-manager.users._lsp_dummy_user = {
|
||||||
|
home.username = "_lsp_dummy_user";
|
||||||
|
home.homeDirectory = "/home/_lsp_dummy_user";
|
||||||
|
home.stateVersion = "24.05";
|
||||||
|
|
||||||
|
# add custom and third party options and configurations
|
||||||
|
imports = [
|
||||||
|
inputs.lan-mouse.homeManagerModules.default
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
"main" = nixpkgs.lib.nixosSystem {
|
"main" = nixpkgs.lib.nixosSystem {
|
||||||
inherit specialArgs;
|
inherit specialArgs;
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
@@ -365,6 +560,40 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#fesu my second server to fusu
|
||||||
|
"fe" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit specialArgs;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/fe.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"te" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit specialArgs;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/te.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"ki" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit specialArgs;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/ki.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# my asus tinker board
|
||||||
|
"ti" = nixpkgs.lib.nixosSystem rec {
|
||||||
|
specialArgs = { inherit inputs confDir workDir secretsDir persistentDir self unstable nur dataDir system;};
|
||||||
|
system = "aarch64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/ti.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
# server that hosts stuff
|
# server that hosts stuff
|
||||||
"fasu" = nixpkgs.lib.nixosSystem {
|
"fasu" = nixpkgs.lib.nixosSystem {
|
||||||
inherit specialArgs;
|
inherit specialArgs;
|
||||||
@@ -393,6 +622,16 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# lesh... seccond raspi
|
||||||
|
"le" = nixpkgs.lib.nixosSystem rec {
|
||||||
|
specialArgs = { inherit inputs confDir workDir secretsDir persistentDir self system; };
|
||||||
|
system = "aarch64-linux";
|
||||||
|
modules = [
|
||||||
|
./hosts/le.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
"hec-tmp" = nixpkgs.lib.nixosSystem rec {
|
"hec-tmp" = nixpkgs.lib.nixosSystem rec {
|
||||||
system = "aarch64-linux";
|
system = "aarch64-linux";
|
||||||
specialArgs = { inherit inputs confDir workDir secretsDir persistentDir self system; };
|
specialArgs = { inherit inputs confDir workDir secretsDir persistentDir self system; };
|
||||||
@@ -560,6 +799,7 @@
|
|||||||
############ nixOnDroidConfigurations ################
|
############ nixOnDroidConfigurations ################
|
||||||
nixOnDroidConfigurations = rec {
|
nixOnDroidConfigurations = rec {
|
||||||
"phone" = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
|
"phone" = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
|
||||||
|
pkgs = import nixpkgs { system = "aarch64-linux"; };
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/phone/nix-on-droid.nix
|
./hosts/phone/nix-on-droid.nix
|
||||||
{
|
{
|
||||||
@@ -575,6 +815,7 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
"tab" = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
|
"tab" = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
|
||||||
|
pkgs = import nixpkgs { system = "aarch64-linux"; };
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/tab/nix-on-droid.nix
|
./hosts/tab/nix-on-droid.nix
|
||||||
{
|
{
|
||||||
@@ -593,4 +834,3 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,22 +6,13 @@
|
|||||||
../common/nixos.nix
|
../common/nixos.nix
|
||||||
../common/building.nix
|
../common/building.nix
|
||||||
|
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
../users/me/headless.nix
|
../users/me/headless.nix
|
||||||
../users/root/default.nix
|
../users/root/default.nix
|
||||||
../users/server/headles.nix
|
../users/server/headles.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = "/dev/disk/by-label/fasu-root";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
|
||||||
device = "/dev/disk/by-label/FASU-BOOT";
|
|
||||||
fsType = "vfat";
|
|
||||||
};
|
|
||||||
|
|
||||||
# allow acern to ssh into server
|
# allow acern to ssh into server
|
||||||
users.users.server.openssh.authorizedKeys.keys = [
|
users.users.server.openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTV1VoNAjMha5IP+qb8XABDo02pW3iN0yPBIbSqZA27 me@acern"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTV1VoNAjMha5IP+qb8XABDo02pW3iN0yPBIbSqZA27 me@acern"
|
||||||
@@ -35,16 +26,8 @@
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
# Use the GRUB 2 boot loader.
|
services.tailscale.enable = true;
|
||||||
boot.loader.grub = {
|
|
||||||
enable = true;
|
|
||||||
#device = "/dev/nbd1";
|
|
||||||
device = "nodev";
|
|
||||||
efiSupport = false;
|
|
||||||
extraConfig = ''
|
|
||||||
set timeout=2
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
#fileSystems."/boot" = {
|
#fileSystems."/boot" = {
|
||||||
# device = "/dev/disk/by-label/fusu-boot";
|
# device = "/dev/disk/by-label/fusu-boot";
|
||||||
@@ -124,4 +107,56 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
############### disk config
|
||||||
|
boot.plymouth.enable = false;
|
||||||
|
boot.loader.grub.enable = true;
|
||||||
|
boot.loader.grub.efiSupport = false;
|
||||||
|
boot.loader.grub.efiInstallAsRemovable = false;
|
||||||
|
boot.loader.grub.devices = [ "nodev" ];
|
||||||
|
boot.loader.grub.extraConfig = ''
|
||||||
|
set timeout=2
|
||||||
|
'';
|
||||||
|
# Add these modules
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ehci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"virtio_balloon"
|
||||||
|
"virtio_blk"
|
||||||
|
"virtio_pci"
|
||||||
|
"virtio_ring"
|
||||||
|
];
|
||||||
|
|
||||||
|
# the flash drive in use for fasu
|
||||||
|
disko.devices.disk.root.device = "/dev/nbd0";
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
root = {
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
|
||||||
|
biosboot = {
|
||||||
|
size = "2M";
|
||||||
|
type = "21686148-6449-6E6F-744E-656564454649"; # BIOS boot
|
||||||
|
};
|
||||||
|
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
182
hosts/fe.nix
Normal file
182
hosts/fe.nix
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
|
||||||
|
{ inputs, pkgs, secretsDir, lib, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
#disabledModules = [ "services/databases/couchdb.nix" ];
|
||||||
|
imports = [
|
||||||
|
#"${inputs.nixpkgs-unstable}/nixos/modules/services/databases/couchdb.nix"
|
||||||
|
../common/all.nix
|
||||||
|
../common/nixos.nix
|
||||||
|
../common/building.nix
|
||||||
|
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
../users/me/headless.nix
|
||||||
|
../users/root/default.nix
|
||||||
|
../users/server/headless.nix
|
||||||
|
|
||||||
|
inputs.arion.nixosModules.arion
|
||||||
|
../mods/fesu-services.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.server.openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKNXOPxlnSxkhm050ui56D5SHrkhuFwUOU0Gf0C+Vmks melektron@goarnix"
|
||||||
|
];
|
||||||
|
users.users.me.openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKNXOPxlnSxkhm050ui56D5SHrkhuFwUOU0Gf0C+Vmks melektron@goarnix"
|
||||||
|
];
|
||||||
|
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
|
virtualisation.libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemuOvmf = true;
|
||||||
|
qemuSwtpm = true;
|
||||||
|
#qemuOvmfPackage = pkgs.OVMFFull;
|
||||||
|
};
|
||||||
|
users.users.server.extraGroups = [ "docker" ];
|
||||||
|
|
||||||
|
# Use the GRUB 2 boot loader.
|
||||||
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
|
#device = "/dev/disk/by-id/ata-TOSHIBA_MQ04ABF100_11MYT5RBT";
|
||||||
|
device = "nodev"; # don't install, when i do nixre -h fusu ... but when installing onto the two discs (sata hdd and nvme ssd) change to the device like above
|
||||||
|
efiSupport = true;
|
||||||
|
extraConfig = ''
|
||||||
|
set timeout=2
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/fes-root";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-label/FES-BOOT";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
# require public key authentication for better security
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "yes";
|
||||||
|
ports = [ 22 49004 ];
|
||||||
|
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowPing = true;
|
||||||
|
networking.firewall.enable = true;
|
||||||
|
|
||||||
|
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
||||||
|
443 # couchdb for obsidian live sync https
|
||||||
|
44444 # resilio sync
|
||||||
|
9000 # resilio webui
|
||||||
|
];
|
||||||
|
|
||||||
|
services.samba.openFirewall = true;
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80 # http
|
||||||
|
443 # https
|
||||||
|
|
||||||
|
8888 # for general usage
|
||||||
|
9999 # for general usage
|
||||||
|
8080 # for mitm proxy
|
||||||
|
5901 # vnc
|
||||||
|
|
||||||
|
5357 # wsdd
|
||||||
|
8080 # for mitm proxy
|
||||||
|
|
||||||
|
49388
|
||||||
|
49389
|
||||||
|
49390
|
||||||
|
49391
|
||||||
|
49392
|
||||||
|
49393
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPortRanges = [
|
||||||
|
{ from = 49000; to = 49300;} # general
|
||||||
|
];
|
||||||
|
networking.firewall.allowedUDPPortRanges = [
|
||||||
|
{ from = 49000; to = 49300;} # general
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
3702 # wsdd
|
||||||
|
67 # allow DHCP traffic
|
||||||
|
53 # allow dns
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.networkmanager.enable = false; # Easiest to use and most distros use this by default.
|
||||||
|
|
||||||
|
# to build rpi images
|
||||||
|
boot.binfmt.emulatedSystems = [
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
sshfs
|
||||||
|
ntfs3g
|
||||||
|
virtiofsd
|
||||||
|
bcache-tools
|
||||||
|
su
|
||||||
|
fuse3
|
||||||
|
terraform
|
||||||
|
usbutils
|
||||||
|
];
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
trusted-public-keys = [
|
||||||
|
"sebastian@c2vi.dev:0tIXGRJMLaI9H1ZPdU4gh+BikUuBVHtk+e1B5HggdZo="
|
||||||
|
];
|
||||||
|
trusted-users = [ "me" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.useDHCP = false;
|
||||||
|
networking.bridges = {
|
||||||
|
"br0" = {
|
||||||
|
interfaces = [ "enp4s0" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.interfaces.br0.ipv4.addresses = [ {
|
||||||
|
address = "192.168.1.4";
|
||||||
|
prefixLength = 24;
|
||||||
|
} ];
|
||||||
|
networking = {
|
||||||
|
usePredictableInterfaceNames = true;
|
||||||
|
defaultGateway = {
|
||||||
|
address = "192.168.1.1";
|
||||||
|
interface = "br0";
|
||||||
|
};
|
||||||
|
hostName = "fe";
|
||||||
|
nameservers = [ "1.1.1.1" "8.8.8.8" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
swapDevices = [{
|
||||||
|
device = "/swapfile";
|
||||||
|
size = 63 * 1024; # 64GB
|
||||||
|
}];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
|
||||||
|
################################ services ############################
|
||||||
|
services.traefik = {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
{ inputs, pkgs, secretsDir, ... }:
|
{ inputs, pkgs, secretsDir, config, dataDir, ... }: let
|
||||||
{
|
|
||||||
|
in {
|
||||||
|
|
||||||
#disabledModules = [ "services/databases/couchdb.nix" ];
|
#disabledModules = [ "services/databases/couchdb.nix" ];
|
||||||
imports = [
|
imports = [
|
||||||
@@ -14,6 +15,9 @@
|
|||||||
../users/root/default.nix
|
../users/root/default.nix
|
||||||
../users/files/headless.nix
|
../users/files/headless.nix
|
||||||
../users/server/headless.nix
|
../users/server/headless.nix
|
||||||
|
|
||||||
|
inputs.arion.nixosModules.arion
|
||||||
|
../mods/fusu-services.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# mac address for wakeonlan: 00:19:99:fd:28:23
|
# mac address for wakeonlan: 00:19:99:fd:28:23
|
||||||
@@ -23,6 +27,17 @@
|
|||||||
#"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTV1VoNAjMha5IP+qb8XABDo02pW3iN0yPBIbSqZA27 me@acern"
|
#"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTV1VoNAjMha5IP+qb8XABDo02pW3iN0yPBIbSqZA27 me@acern"
|
||||||
#];
|
#];
|
||||||
|
|
||||||
|
virtualisation.libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemuOvmf = true;
|
||||||
|
qemuSwtpm = true;
|
||||||
|
};
|
||||||
|
# store libvirt data in dataDir
|
||||||
|
fileSystems."/var/lib/libvirt" = {
|
||||||
|
device = "/home/me/host/libvirt";
|
||||||
|
options = [ "bind" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# allow server user to shutdown fusu
|
# allow server user to shutdown fusu
|
||||||
@@ -37,12 +52,29 @@
|
|||||||
|
|
||||||
|
|
||||||
services.tailscale.enable = true;
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
|
|
||||||
services.resilio = {
|
services.resilio = {
|
||||||
# TODO: add the config for the share to here
|
|
||||||
enable = true;
|
enable = true;
|
||||||
enableWebUI = true;
|
enableWebUI = true;
|
||||||
httpListenAddr = "100.70.54.18";
|
httpListenAddr = "100.70.54.18";
|
||||||
|
checkForUpdates = false;
|
||||||
|
listeningPort = 44444;
|
||||||
};
|
};
|
||||||
|
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
||||||
|
44444 # resilio sync
|
||||||
|
9000 # resilio webui
|
||||||
|
9001 # fwin vnc
|
||||||
|
9002 # fwin rdp
|
||||||
|
9003 # fwin ssh
|
||||||
|
];
|
||||||
|
networking.firewall.interfaces."br0".allowedTCPPorts = [
|
||||||
|
44444 # resilio sync
|
||||||
|
9000 # resilio webui
|
||||||
|
9001 # fwin vnc
|
||||||
|
9002 # fwin rdp
|
||||||
|
9003 # fwin ssh
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
boot.supportedFilesystems = [ "zfs" ];
|
boot.supportedFilesystems = [ "zfs" ];
|
||||||
@@ -55,15 +87,6 @@
|
|||||||
fsType = "zfs";
|
fsType = "zfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisation.libvirtd = {
|
|
||||||
enable = true;
|
|
||||||
qemuOvmf = true;
|
|
||||||
qemuSwtpm = true;
|
|
||||||
#qemuOvmfPackage = pkgs.OVMFFull;
|
|
||||||
};
|
|
||||||
virtualisation.docker.enable = true;
|
|
||||||
users.users.server.extraGroups = [ "docker" ];
|
|
||||||
|
|
||||||
# Use the GRUB 2 boot loader.
|
# Use the GRUB 2 boot loader.
|
||||||
boot.loader.grub = {
|
boot.loader.grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -98,12 +121,6 @@
|
|||||||
networking.firewall.allowPing = true;
|
networking.firewall.allowPing = true;
|
||||||
networking.firewall.enable = true;
|
networking.firewall.enable = true;
|
||||||
|
|
||||||
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
|
||||||
443 # couchdb for obsidian live sync https
|
|
||||||
44444 # resilio sync
|
|
||||||
9000 # resilio webui
|
|
||||||
];
|
|
||||||
|
|
||||||
services.samba.openFirewall = true;
|
services.samba.openFirewall = true;
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
@@ -154,6 +171,8 @@
|
|||||||
fuse3
|
fuse3
|
||||||
terraform
|
terraform
|
||||||
usbutils
|
usbutils
|
||||||
|
qemu_full
|
||||||
|
libvirt
|
||||||
];
|
];
|
||||||
|
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
@@ -430,6 +449,10 @@
|
|||||||
user = "server";
|
user = "server";
|
||||||
port = 49388;
|
port = 49388;
|
||||||
};
|
};
|
||||||
|
ocih = {
|
||||||
|
hostname = "152.67.70.13";
|
||||||
|
user = "ubuntu";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -505,7 +528,7 @@
|
|||||||
};
|
};
|
||||||
path = with pkgs; [ curl bash socat borgbackup openssh ];
|
path = with pkgs; [ curl bash socat borgbackup openssh ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "/home/borgs/backups/fusu-ocih.sh";
|
ExecStart = "/home/borgs/backups/ocih.sh";
|
||||||
User = "borgs";
|
User = "borgs";
|
||||||
Group = "borgs";
|
Group = "borgs";
|
||||||
WorkingDirectory = "/home/borgs/backups";
|
WorkingDirectory = "/home/borgs/backups";
|
||||||
|
|||||||
320
hosts/ki.nix
Normal file
320
hosts/ki.nix
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
{ lib, secretsDir, pkgs, inputs, unstable, ... }: let
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
../common/all.nix
|
||||||
|
../common/nixos.nix
|
||||||
|
../common/building.nix
|
||||||
|
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
../users/me/gui.nix
|
||||||
|
../users/root/default.nix
|
||||||
|
../common/nixos-wayland.nix
|
||||||
|
];
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
|
services.keyd.enable = lib.mkForce false;
|
||||||
|
|
||||||
|
networking.hostName = "ki";
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
addresses = true;
|
||||||
|
domain = true;
|
||||||
|
hinfo = true;
|
||||||
|
userServices = true;
|
||||||
|
workstation = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
8888 # for general usage
|
||||||
|
9999 # for general usage
|
||||||
|
6000 # Xserver
|
||||||
|
6666 # vnc sway
|
||||||
|
5900 # vnc for win VM
|
||||||
|
5901 # vnc
|
||||||
|
5902 # vnc
|
||||||
|
4400 # rdp win VM
|
||||||
|
4401 # ssh for mandroid
|
||||||
|
4402 # random
|
||||||
|
4403 # random
|
||||||
|
4404 # random
|
||||||
|
4405 # clipboard sync
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
48899 # GoodWe inverter discovery
|
||||||
|
4410 # lan-mouse
|
||||||
|
41641 # tailscale
|
||||||
|
];
|
||||||
|
|
||||||
|
services.resilio = {
|
||||||
|
enable = true;
|
||||||
|
enableWebUI = true;
|
||||||
|
httpListenAddr = "100.96.201.42";
|
||||||
|
checkForUpdates = false;
|
||||||
|
listeningPort = 44444;
|
||||||
|
};
|
||||||
|
users.users.me.extraGroups = [ "rslsync" ];
|
||||||
|
users.users.rslsync.extraGroups = [ "users" ];
|
||||||
|
users.users.me.homeMode = "770"; # important for resilio
|
||||||
|
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
||||||
|
44444 # resilio sync
|
||||||
|
9000 # resilio webui
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
swapDevices = [ { device = "/swapfile"; } ];
|
||||||
|
|
||||||
|
boot.kernelModules = [ "usbip_core" ];
|
||||||
|
boot.extraModprobeConfig = "options kvm_intel nested=1";
|
||||||
|
|
||||||
|
# to build rpi images
|
||||||
|
boot.binfmt.emulatedSystems = [
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager.users.me.home.file.".config/sway/config".text = ''
|
||||||
|
exec ${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 6666
|
||||||
|
'';
|
||||||
|
|
||||||
|
virtualisation.libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemuOvmf = true;
|
||||||
|
qemuSwtpm = true;
|
||||||
|
#qemuOvmfPackage = pkgs.OVMFFull;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
linuxPackages.usbip
|
||||||
|
helvum
|
||||||
|
passt
|
||||||
|
mount
|
||||||
|
pkgs.hicolor-icon-theme
|
||||||
|
efibootmgr
|
||||||
|
tcpdump
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
# require public key authentication for better security
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "no";
|
||||||
|
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.extraConfig = "DefaultLimitNOFILE=2048";
|
||||||
|
|
||||||
|
services.logind = {
|
||||||
|
extraConfig = ''
|
||||||
|
HandlePowerKey=suspend-then-hibernate
|
||||||
|
'';
|
||||||
|
lidSwitch = "ignore";
|
||||||
|
lidSwitchExternalPower = "ignore";
|
||||||
|
lidSwitchDocked = "ignore";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.dbus.enable = true;
|
||||||
|
|
||||||
|
fonts.enableDefaultPackages = true;
|
||||||
|
xdg.icons.enable = true;
|
||||||
|
gtk.iconCache.enable = true;
|
||||||
|
|
||||||
|
services.udisks2.enable = false;
|
||||||
|
hardware.opengl.enable = true;
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
|
systemd.defaultUnit = "graphical.target";
|
||||||
|
|
||||||
|
|
||||||
|
############################# networkmanager
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
networking.networkmanager.profiles = {
|
||||||
|
pw = {
|
||||||
|
connection = {
|
||||||
|
id = "pw";
|
||||||
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp2s0";
|
||||||
|
autoconnect-priority = "200";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gw = {
|
||||||
|
connection = {
|
||||||
|
id = "gw";
|
||||||
|
uuid = "de655c52-1af2-4b46-b7b2-8ddad9edb52f";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp2s0";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "false";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/gw-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/gw-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hot = {
|
||||||
|
connection = {
|
||||||
|
id = "hot";
|
||||||
|
uuid = "ab51de8a-9742-465a-928b-be54a83ab6a3";
|
||||||
|
type = "wifi";
|
||||||
|
autoconnect = false;
|
||||||
|
interface-name = "wlp3s0";
|
||||||
|
};
|
||||||
|
wifi = {
|
||||||
|
mode = "ap";
|
||||||
|
ssid = "c2vi-ki";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
share = {
|
||||||
|
connection = {
|
||||||
|
id = "share";
|
||||||
|
uuid = "f55f34e3-4595-4642-b1f6-df3185bc0a04";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = false;
|
||||||
|
interface-name = "enp2s0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "C8:2A:14:0B:7F:3D";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.4.1/24";
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 = {
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dhcp = {
|
||||||
|
connection = {
|
||||||
|
id = "dhcp";
|
||||||
|
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = true;
|
||||||
|
interface-name = "enp2s0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "C8:2A:14:0B:7F:3D";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "auto";
|
||||||
|
address1 = "192.168.1.33/24,192.168.1.1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
############### disk config
|
||||||
|
boot.plymouth.enable = false;
|
||||||
|
boot.loader.grub.enable = true;
|
||||||
|
boot.loader.grub.efiSupport = true;
|
||||||
|
boot.loader.grub.efiInstallAsRemovable = true;
|
||||||
|
boot.loader.grub.devices = [ "nodev" ];
|
||||||
|
boot.loader.grub.extraConfig = ''
|
||||||
|
set timeout=2
|
||||||
|
'';
|
||||||
|
|
||||||
|
# the flash drive in use for te
|
||||||
|
#disko.devices.disk.root.device = "/dev/disk/by-id/usb-Generic_Flash_Disk_FF830E8F-0:0";
|
||||||
|
disko.devices.disk.root.device = "/dev/disk/by-id/ata-SSD_HB202408140276168";
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
root = {
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
|
||||||
|
biosboot = {
|
||||||
|
size = "2M";
|
||||||
|
type = "21686148-6449-6E6F-744E-656564454649"; # BIOS boot
|
||||||
|
};
|
||||||
|
|
||||||
|
ESP = {
|
||||||
|
size = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
347
hosts/le.nix
Normal file
347
hosts/le.nix
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
{ lib, pkgs, inputs, secretsDir, config, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
#system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
|
||||||
|
#inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
||||||
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
|
|
||||||
|
../common/all.nix
|
||||||
|
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
../users/me/headless.nix
|
||||||
|
|
||||||
|
##### project modules #####
|
||||||
|
|
||||||
|
# the module for the zwave setup
|
||||||
|
#"${workDir}/htl/labor/hackl/zwave.nix"
|
||||||
|
|
||||||
|
# labor nas project
|
||||||
|
# with this moduel it does not boot, it waits for /dev/disk/by-label/nas-storage
|
||||||
|
# "${workDir}/htl/labor/nas/nixos/lush-module.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
# fix bluetooth
|
||||||
|
hardware = {
|
||||||
|
bluetooth = {
|
||||||
|
package = pkgs.bluez;
|
||||||
|
enable = true;
|
||||||
|
powerOnBoot = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# get usbip working
|
||||||
|
boot.extraModulePackages = [
|
||||||
|
config.boot.kernelPackages.usbip
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
boot.kernelParams = lib.mkForce ["console=ttyS0,115200n8" "console=ttyAMA0,115200n8" "console=tty0" "nohibernate" "loglevel=7" ];
|
||||||
|
# hardware.bluetooth.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# home-manager.users.me = import ../users/me/home-headless.nix;
|
||||||
|
|
||||||
|
|
||||||
|
/* for cross compiling
|
||||||
|
#nixpkgs.hostPlatform.system = "aarch64-linux";
|
||||||
|
#nixpkgs.buildPlatform.system = "x86_64-linux";
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
|
||||||
|
(outerFinal: outerPrev: {
|
||||||
|
#https://github.com/adrienverge/openfortivpn/issues/446
|
||||||
|
#https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/tools/networking/openfortivpn/default.nix#L47
|
||||||
|
openfortivpn = outerPrev.openfortivpn.overrideAttrs (final: prev: {
|
||||||
|
configureFlags = prev.configureFlags or [] ++ [
|
||||||
|
"--disable-proc"
|
||||||
|
"--with-rt_dst=yes"
|
||||||
|
"--with-pppd=/usr/sbin/pppd"
|
||||||
|
];
|
||||||
|
});
|
||||||
|
})
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
services.blueman.enable = true;
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
linuxPackages.usbip
|
||||||
|
vim
|
||||||
|
bluez
|
||||||
|
git
|
||||||
|
];
|
||||||
|
|
||||||
|
# "${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix" creates a
|
||||||
|
# disk with this label on first boot. Therefore, we need to keep it. It is the
|
||||||
|
# only information from the installer image that we need to keep persistent
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/NIXOS_SD";
|
||||||
|
noCheck = true;
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
#kernelPackages = lib.mkForce pkgs.linuxPackages_latest;
|
||||||
|
loader = {
|
||||||
|
generic-extlinux-compatible.enable = lib.mkDefault true;
|
||||||
|
grub.enable = lib.mkDefault false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
########################### ssh ############################
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [ 22 ];
|
||||||
|
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "no";
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
####################################### networking ##########################
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
3702 # wsdd
|
||||||
|
51820 # wireguard
|
||||||
|
67 # allow DHCP traffic
|
||||||
|
53 # allow dns
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
8888 # general use
|
||||||
|
9999 # general use
|
||||||
|
3240 # usbip
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.hostName = "le";
|
||||||
|
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
networking.networkmanager.profiles = {
|
||||||
|
pw = {
|
||||||
|
connection = {
|
||||||
|
id = "pw";
|
||||||
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlan0";
|
||||||
|
autoconnect = true;
|
||||||
|
autoconnect-priority = "400";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.20.21/24";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hot = {
|
||||||
|
connection = {
|
||||||
|
id = "hot";
|
||||||
|
uuid = "ab51de8a-9742-465a-928b-be54a83ab6a3";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp3s0";
|
||||||
|
autoconnect-priority = "200";
|
||||||
|
};
|
||||||
|
wifi = {
|
||||||
|
mode = "ap";
|
||||||
|
ssid = "c2vi-le";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hh40 = {
|
||||||
|
connection = {
|
||||||
|
id = "hh40";
|
||||||
|
uuid = "73a61cef-8f7b-4f42-ab3f-0066e0295bbc";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlan0";
|
||||||
|
autoconnect = true;
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "false";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/home-wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/home-wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "auto";
|
||||||
|
address1 = "192.168.1.37/24";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dhcp = {
|
||||||
|
connection = {
|
||||||
|
id = "dhcp";
|
||||||
|
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = true;
|
||||||
|
interface-name = "end0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "DC:A6:32:CB:4D:5E";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.1.44/24,192.168.1.1";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
share = {
|
||||||
|
connection = {
|
||||||
|
id = "share";
|
||||||
|
uuid = "f55f34e3-4595-4642-b1f6-df3185bc0a04";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = false;
|
||||||
|
interface-name = "end0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "DC:A6:32:CB:4D:5E";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.4.1/24";
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 = {
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pt = {
|
||||||
|
connection = {
|
||||||
|
id = "pt";
|
||||||
|
uuid = "f028117e-9eef-47c1-8483-574f7ee798a4";
|
||||||
|
type = "bluetooth";
|
||||||
|
autoconnect = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bluetooth = {
|
||||||
|
bdaddr = "E8:78:29:C4:BA:7C";
|
||||||
|
type = "panu";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.44.22/24";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
me = {
|
||||||
|
connection = {
|
||||||
|
id = "me";
|
||||||
|
uuid = "fe45d3bc-21c6-41ff-bc06-c936017c6e02";
|
||||||
|
type = "wireguard";
|
||||||
|
autoconnect = "true";
|
||||||
|
interface-name = "me0";
|
||||||
|
};
|
||||||
|
wireguard = {
|
||||||
|
listen-port = "51820";
|
||||||
|
private-key = builtins.readFile "${secretsDir}/wg-private-lush";
|
||||||
|
};
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "10.1.1.4/24";
|
||||||
|
method = "manual";
|
||||||
|
};
|
||||||
|
} // (import ../common/wg-peers.nix { inherit secretsDir; });
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
systemd.services.iwd.serviceConfig.Restart = "always";
|
||||||
|
/*
|
||||||
|
networking = {
|
||||||
|
interfaces."wlan0".useDHCP = true;
|
||||||
|
|
||||||
|
interfaces."eth0" = {
|
||||||
|
#name = "eth0";
|
||||||
|
ipv4.addresses = [
|
||||||
|
{ address = "192.168.5.5"; prefixLength = 24;}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
wireless = {
|
||||||
|
interfaces = [ "wlan0" ];
|
||||||
|
enable = true;
|
||||||
|
networks = {
|
||||||
|
seb-phone.psk = "hellogello";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
####################################### wireguard ##########################
|
||||||
|
/*
|
||||||
|
systemd.network.netdevs.me0 = {
|
||||||
|
enable = true;
|
||||||
|
wireguardPeers = import ../common/wg-peers.nix { inherit secretsDir; };
|
||||||
|
wireguardConfig = {
|
||||||
|
ListenPort = 51820;
|
||||||
|
PrivateKeyFile = "/etc/wireguard/secret.key";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.wireguard.interfaces = {
|
||||||
|
me = {
|
||||||
|
ips = [ "10.1.1.11/24" ];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
boot = {
|
||||||
|
kernelPackages = pkgs.linuxKernel.packages.linux_rpi4;
|
||||||
|
initrd.availableKernelModules = [ "xhci_pci" "usbhid" "usb_storage" ];
|
||||||
|
loader = {
|
||||||
|
grub.enable = false;
|
||||||
|
generic-extlinux-compatible.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
@@ -155,6 +155,32 @@
|
|||||||
method = "auto";
|
method = "auto";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
gw = {
|
||||||
|
connection = {
|
||||||
|
id = "gw";
|
||||||
|
uuid = "de655c52-1af2-4b46-b7b2-8ddad9edb52f";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlan0";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/gw-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/gw-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
hh40 = {
|
hh40 = {
|
||||||
connection = {
|
connection = {
|
||||||
|
|||||||
218
hosts/mac.nix
218
hosts/mac.nix
@@ -1,9 +1,10 @@
|
|||||||
{ lib, secretsDir, pkgs, inputs, ... }: let
|
{ lib, secretsDir, pkgs, inputs, unstable, ... }: let
|
||||||
|
|
||||||
myobs = pkgs.wrapOBS {
|
myobs = pkgs.wrapOBS {
|
||||||
plugins = with pkgs.obs-studio-plugins; [
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
obs-ndi
|
obs-ndi
|
||||||
obs-teleport
|
obs-teleport
|
||||||
|
droidcam-obs
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -21,6 +22,10 @@ in {
|
|||||||
../users/root/default.nix
|
../users/root/default.nix
|
||||||
../common/nixos-wayland.nix
|
../common/nixos-wayland.nix
|
||||||
];
|
];
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
|
#services.pid-fan-controller.enable = true;
|
||||||
|
|
||||||
networking.hostName = "mac";
|
networking.hostName = "mac";
|
||||||
networking.firewall.enable = false;
|
networking.firewall.enable = false;
|
||||||
@@ -57,6 +62,19 @@ in {
|
|||||||
4410 # lan-mouse
|
4410 # lan-mouse
|
||||||
];
|
];
|
||||||
|
|
||||||
|
##### Netbird Configuration
|
||||||
|
services.netbird.clients.ppc = {
|
||||||
|
#login = {
|
||||||
|
#enable = true;
|
||||||
|
#setupKeyFile = "${secretsDir}/netbird-setup-key";
|
||||||
|
#};
|
||||||
|
port = 51821;
|
||||||
|
ui.enable = false;
|
||||||
|
openFirewall = true;
|
||||||
|
#openInternalFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
swapDevices = [ { device = "/swapfile"; } ];
|
swapDevices = [ { device = "/swapfile"; } ];
|
||||||
|
|
||||||
boot.kernelModules = [ "usbip_core" ];
|
boot.kernelModules = [ "usbip_core" ];
|
||||||
@@ -67,11 +85,15 @@ in {
|
|||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
networking.nftables.enable = true;
|
||||||
virtualisation.libvirtd = {
|
virtualisation.libvirtd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
qemuOvmf = true;
|
qemuOvmf = true;
|
||||||
qemuSwtpm = true;
|
qemuSwtpm = true;
|
||||||
#qemuOvmfPackage = pkgs.OVMFFull;
|
#qemuOvmfPackage = pkgs.OVMFFull;
|
||||||
|
extraConfig = ''
|
||||||
|
firewall_backend = "nftables"
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Use the GRUB 2 boot loader.
|
# Use the GRUB 2 boot loader.
|
||||||
@@ -85,7 +107,32 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# fix bluetooth-3-0-keyboard not reporting left and right cmd seperately (and remapping the other things the way i want them)
|
||||||
|
services.udev.extraHwdb = ''
|
||||||
|
evdev:input:b0005v05AC*
|
||||||
|
KEYBOARD_KEY_700e3=leftctrl
|
||||||
|
KEYBOARD_KEY_700e7=rightalt
|
||||||
|
KEYBOARD_KEY_700e2=leftmeta
|
||||||
|
KEYBOARD_KEY_700e0=leftalt
|
||||||
|
'';
|
||||||
|
|
||||||
|
# fan speed fix
|
||||||
|
systemd.services.my-fan-speed-fix = {
|
||||||
|
description = "Set applesmc fan values";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = ''
|
||||||
|
/bin/sh -c 'echo 1 > /sys/devices/platform/applesmc.768/fan2_manual; echo 1000 > /sys/devices/platform/applesmc.768/fan2_output'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
#startAt = "*:0/3"; # Runs every 3 minutes
|
||||||
|
wantedBy = [ "multi-user.target" "suspend.target" "hibernate.target" "hybrid-sleep.target" ];
|
||||||
|
after = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
myobs
|
||||||
|
lm_sensors
|
||||||
linuxPackages.usbip
|
linuxPackages.usbip
|
||||||
helvum
|
helvum
|
||||||
passt
|
passt
|
||||||
@@ -107,20 +154,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
#usePredictableInterfaceNames = false;
|
|
||||||
defaultGateway = {
|
|
||||||
address = "192.168.1.1";
|
|
||||||
interface = "enp2s0";
|
|
||||||
};
|
|
||||||
nameservers = [ "1.1.1.1" "8.8.8.8" ];
|
nameservers = [ "1.1.1.1" "8.8.8.8" ];
|
||||||
interfaces = {
|
|
||||||
"enp2s0" = {
|
|
||||||
name = "enp2s0";
|
|
||||||
ipv4.addresses = [
|
|
||||||
{ address = "192.168.1.33"; prefixLength = 24;}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.openssh = {
|
services.openssh = {
|
||||||
@@ -137,12 +171,12 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.me.home.file.".config/sway/config".text = ''
|
#home-manager.users.me.home.file.".config/sway/config".text = ''
|
||||||
exec ${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 6666
|
#exec ${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 6666
|
||||||
#exec 'wl-paste -w ${pkgs.netcat-openbsd}/bin/nc 192.168.1.11 4405'
|
#exec 'wl-paste -w ${pkgs.netcat-openbsd}/bin/nc 192.168.1.11 4405'
|
||||||
#exec 'sh -c "while true; do ${pkgs.netcat-openbsd}/bin/nc -l 4405 | wl-copy; done"'
|
#exec 'sh -c "while true; do ${pkgs.netcat-openbsd}/bin/nc -l 4405 | wl-copy; done"'
|
||||||
#exec 'sh -c "while true; do cat ~/clipboard | wl-paste; done"'
|
#exec 'sh -c "while true; do cat ~/clipboard | wl-paste; done"'
|
||||||
'';
|
#'';
|
||||||
|
|
||||||
home-manager.users.me.programs.lan-mouse = {
|
home-manager.users.me.programs.lan-mouse = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -155,10 +189,8 @@ in {
|
|||||||
position = "left";
|
position = "left";
|
||||||
hostname = "main";
|
hostname = "main";
|
||||||
activate_on_startup = true;
|
activate_on_startup = true;
|
||||||
ips = [ "192.168.1.11" ];
|
ips = [ "192.168.4.2" "100.71.47.106" ];
|
||||||
port = 4410;
|
port = 4410;
|
||||||
#enter_hook = "${pkgs.wl-clipboard}/bin/wl-paste | ${pkgs.netcat-openbsd}/bin/nc 192.168.1.11 4405";
|
|
||||||
enter_hook = "/run/current-system/sw/bin/cat /home/me/.cache/clipboard | ${pkgs.netcat-openbsd}/bin/nc 192.168.1.11 4405 -N";
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -170,13 +202,49 @@ in {
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgKLRF9iYRH3Y8hPjLX1ZY6GyavruqcQ0Q0Y8bnmpv9 me@tab"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgKLRF9iYRH3Y8hPjLX1ZY6GyavruqcQ0Q0Y8bnmpv9 me@tab"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
#services.greetd.enable = lib.mkForce false;
|
|
||||||
services.greetd = lib.mkForce {
|
services.greetd = lib.mkForce {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = rec {
|
settings = rec {
|
||||||
terminal.vt = 2;
|
terminal.vt = 1;
|
||||||
initial_session = {
|
initial_session = let
|
||||||
|
|
||||||
|
newerUnstableSrc = builtins.getFlake "nixpkgs/d0fc30899600b9b3466ddb260fd83deb486c32f1";
|
||||||
|
newerUnstable = import newerUnstableSrc.outPath {};
|
||||||
|
|
||||||
|
mySway = newerUnstable.sway.override {
|
||||||
|
sway-unwrapped = (newerUnstable.sway-unwrapped.overrideAttrs (prev: {
|
||||||
|
/*
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "WillPower3309";
|
||||||
|
repo = "swayfx";
|
||||||
|
rev = "";
|
||||||
|
hash = "";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "swaywm";
|
||||||
|
repo = "sway";
|
||||||
|
rev = "73c244fb4807a29c6599d42c15e8a8759225b2d6";
|
||||||
|
hash = "sha256-P2w1oRVUNBWajt8jZOxPXvBE29urbrhtORy+lfYqnF8=";
|
||||||
|
};
|
||||||
|
})).override {
|
||||||
|
wlroots = newerUnstable.wlroots.overrideAttrs (prev: {
|
||||||
|
version = "master";
|
||||||
|
src = pkgs.fetchFromGitLab {
|
||||||
|
domain = "gitlab.freedesktop.org";
|
||||||
|
owner = "wlroots";
|
||||||
|
repo = "wlroots";
|
||||||
|
rev = "master";
|
||||||
|
sha256 = "sha256-2FK6FGRpgf/YYqwJST0LVA/pnNRSUDrfrrp6mSwA0Fk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
in {
|
||||||
|
#command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time -d --env WLR_RENDERER_ALLOW_SOFTWARE=1 --cmd sway";
|
||||||
command = "${pkgs.writeScriptBin "run-sway" ''
|
command = "${pkgs.writeScriptBin "run-sway" ''
|
||||||
export WLR_RENDERER_ALLOW_SOFTWARE=1
|
export WLR_RENDERER_ALLOW_SOFTWARE=1
|
||||||
export SDL_VIDEODRIVER=wayland
|
export SDL_VIDEODRIVER=wayland
|
||||||
@@ -184,7 +252,7 @@ in {
|
|||||||
export QT_QPA_PLATFORM=wayland
|
export QT_QPA_PLATFORM=wayland
|
||||||
export XDG_CURRENT_DESKTOP=sway
|
export XDG_CURRENT_DESKTOP=sway
|
||||||
export XDG_SESSION_DESKTOP=sway
|
export XDG_SESSION_DESKTOP=sway
|
||||||
exec sway > /tmp/sway-log 2>&1
|
exec ${pkgs.lib.getExe mySway}
|
||||||
''}/bin/run-sway";
|
''}/bin/run-sway";
|
||||||
user = "me";
|
user = "me";
|
||||||
};
|
};
|
||||||
@@ -192,6 +260,56 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services."sway@" = let
|
||||||
|
mySway = unstable.sway.overrideAttrs (prev: {
|
||||||
|
/*
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "WillPower3309";
|
||||||
|
repo = "swayfx";
|
||||||
|
rev = "";
|
||||||
|
hash = "";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "swaywm";
|
||||||
|
repo = "sway";
|
||||||
|
rev = "73c244fb4807a29c6599d42c15e8a8759225b2d6";
|
||||||
|
hash = "sha256-P2w1oRVUNBWajt8jZOxPXvBE29urbrhtORy+lfYqnF8=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
in {
|
||||||
|
enable = false;
|
||||||
|
after = [ "systemd-user-sessions.service" "dbus.socket" "systemd-logind.service" "getty@%i.service" "plymouth-deactivate.service" "plymouth-quit.service" ];
|
||||||
|
before = [ "graphical.target" ];
|
||||||
|
wants = [ "dbus.socket" "systemd-logind.service" "plymouth-deactivate.service" ];
|
||||||
|
wantedBy = [ "graphical.target" ];
|
||||||
|
conflicts = [ "getty@%i.service" ]; # "plymouth-quit.service" "plymouth-quit-wait.service"
|
||||||
|
|
||||||
|
restartIfChanged = false;
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${lib.getExe mySway}";
|
||||||
|
User = "me";
|
||||||
|
|
||||||
|
# ConditionPathExists = "/dev/tty0";
|
||||||
|
IgnoreSIGPIPE = "no";
|
||||||
|
|
||||||
|
# Log this user with utmp, letting it show up with commands 'w' and
|
||||||
|
# 'who'. This is needed since we replace (a)getty.
|
||||||
|
UtmpIdentifier = "%I";
|
||||||
|
UtmpMode = "user";
|
||||||
|
# A virtual terminal is needed.
|
||||||
|
TTYPath = "/dev/%I";
|
||||||
|
TTYReset = "yes";
|
||||||
|
TTYVHangup = "yes";
|
||||||
|
TTYVTDisallocate = "yes";
|
||||||
|
# Fail to start if not controlling the virtual terminal.
|
||||||
|
#StandardInput = "tty-fail";
|
||||||
|
#StandardOutput = "syslog";
|
||||||
|
#StandardError = "syslog";
|
||||||
|
# Set up a full (custom) user session for the user, required by Cage.
|
||||||
|
PAMName = "cage";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
systemd.extraConfig = "DefaultLimitNOFILE=2048";
|
systemd.extraConfig = "DefaultLimitNOFILE=2048";
|
||||||
|
|
||||||
@@ -209,7 +327,7 @@ in {
|
|||||||
hardware.enableRedistributableFirmware = true;
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
systemd.services."cage@" = {
|
systemd.services."cage@" = {
|
||||||
enable = true;
|
enable = false;
|
||||||
after = [ "systemd-user-sessions.service" "dbus.socket" "systemd-logind.service" "getty@%i.service" "plymouth-deactivate.service" "plymouth-quit.service" ];
|
after = [ "systemd-user-sessions.service" "dbus.socket" "systemd-logind.service" "getty@%i.service" "plymouth-deactivate.service" "plymouth-quit.service" ];
|
||||||
before = [ "graphical.target" ];
|
before = [ "graphical.target" ];
|
||||||
wants = [ "dbus.socket" "systemd-logind.service" "plymouth-deactivate.service" ];
|
wants = [ "dbus.socket" "systemd-logind.service" "plymouth-deactivate.service" ];
|
||||||
@@ -258,12 +376,28 @@ in {
|
|||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
networking.networkmanager.profiles = {
|
networking.networkmanager.profiles = {
|
||||||
|
home = {
|
||||||
|
connection = {
|
||||||
|
id = "home";
|
||||||
|
uuid = "a02273d9-ad12-395e-8372-f61129635b6f";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
interface-name = "enp2s0";
|
||||||
|
};
|
||||||
|
ipv4 = {
|
||||||
|
address2 = "192.168.4.3/24";
|
||||||
|
dns = "1.1.1.1;";
|
||||||
|
method = "manual";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
pw = {
|
pw = {
|
||||||
connection = {
|
connection = {
|
||||||
id = "pw";
|
id = "pw";
|
||||||
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
type = "wifi";
|
type = "wifi";
|
||||||
interface-name = "wlp3s0";
|
interface-name = "wlp3s0";
|
||||||
|
autoconnect-priority = "200";
|
||||||
};
|
};
|
||||||
|
|
||||||
wifi = {
|
wifi = {
|
||||||
@@ -284,13 +418,40 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gw = {
|
||||||
|
connection = {
|
||||||
|
id = "gw";
|
||||||
|
uuid = "de655c52-1af2-4b46-b7b2-8ddad9edb52f";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp3s0";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/gw-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/gw-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
hot = {
|
hot = {
|
||||||
connection = {
|
connection = {
|
||||||
id = "hot";
|
id = "hot";
|
||||||
uuid = "ab51de8a-9742-465a-928b-be54a83ab6a3";
|
uuid = "ab51de8a-9742-465a-928b-be54a83ab6a3";
|
||||||
type = "wifi";
|
type = "wifi";
|
||||||
autoconnect = false;
|
|
||||||
interface-name = "wlp3s0";
|
interface-name = "wlp3s0";
|
||||||
|
autoconnect-priority = "100";
|
||||||
};
|
};
|
||||||
wifi = {
|
wifi = {
|
||||||
mode = "ap";
|
mode = "ap";
|
||||||
@@ -336,7 +497,8 @@ in {
|
|||||||
id = "dhcp";
|
id = "dhcp";
|
||||||
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
||||||
type = "ethernet";
|
type = "ethernet";
|
||||||
autoconnect = true;
|
autoconnect = false;
|
||||||
|
autoconnect-priority = "200";
|
||||||
interface-name = "enp2s0";
|
interface-name = "enp2s0";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
271
hosts/main.nix
271
hosts/main.nix
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
{ pkgs, lib, workDir, self, secretsDir, config, inputs, system, pkgsUnstable, ... }:
|
{ pkgs, lib, persistentDir, self, secretsDir, config, inputs, system, pkgsUnstable, ... }:
|
||||||
{
|
{
|
||||||
|
|
||||||
# https://bugzilla.kernel.org/show_bug.cgi?id=110941
|
# https://bugzilla.kernel.org/show_bug.cgi?id=110941
|
||||||
@@ -35,7 +35,18 @@
|
|||||||
|
|
||||||
#services.openssh.enable = true;
|
#services.openssh.enable = true;
|
||||||
|
|
||||||
|
programs.obs-studio = {
|
||||||
|
enable = true;
|
||||||
|
enableVirtualCamera = true;
|
||||||
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
|
droidcam-obs
|
||||||
|
#distroav
|
||||||
|
obs-teleport
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
# virtual display
|
# virtual display
|
||||||
|
/*
|
||||||
hardware.display = {
|
hardware.display = {
|
||||||
|
|
||||||
edid.packages = [
|
edid.packages = [
|
||||||
@@ -56,12 +67,13 @@
|
|||||||
UUEwQzAxNzgwMDEKACU=
|
UUEwQzAxNzgwMDEKACU=
|
||||||
EOF
|
EOF
|
||||||
'')
|
'')
|
||||||
*/
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
# find a free GPU output using this command:
|
# find a free GPU output using this command:
|
||||||
# for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
|
# for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
|
||||||
|
/*
|
||||||
outputs."DP-2" = {
|
outputs."DP-2" = {
|
||||||
edid = "virtual.bin";
|
edid = "virtual.bin";
|
||||||
|
|
||||||
@@ -71,10 +83,25 @@
|
|||||||
mode = "1920x1080e";
|
mode = "1920x1080e";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
##### Netbird Configuration
|
||||||
|
services.netbird.clients.ppc = {
|
||||||
|
#login = {
|
||||||
|
#enable = true;
|
||||||
|
#setupKeyFile = "${secretsDir}/netbird-setup-key";
|
||||||
|
#};
|
||||||
|
port = 51821;
|
||||||
|
ui.enable = false;
|
||||||
|
openFirewall = true;
|
||||||
|
#openInternalFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
programs.fuse.userAllowOther = true;
|
programs.fuse.userAllowOther = true;
|
||||||
|
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
services.sunshine = {
|
services.sunshine = {
|
||||||
enable = false;
|
enable = false;
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
@@ -118,6 +145,10 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
league-gothic
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
hardware.graphics.extraPackages = with pkgs; [
|
hardware.graphics.extraPackages = with pkgs; [
|
||||||
@@ -125,22 +156,41 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
services.keyd = {
|
||||||
|
enable = true;
|
||||||
|
/*
|
||||||
|
keyboards.bluetooth-3-0-keyboard = {
|
||||||
|
ids = [ "05ac:0255:f22563e9" ];
|
||||||
|
settings.main = {
|
||||||
|
leftalt = "meta";
|
||||||
|
leftcontrol = "leftalt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
#keyboards.default.ids = [ "-05ac:0255" ]; completely disables my rebinding...... hmmmm
|
||||||
|
keyboards.default.settings = {
|
||||||
|
main = {
|
||||||
|
leftalt = "leftcontrol";
|
||||||
|
leftcontrol = "leftalt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
home-manager.users.me.programs.lan-mouse = {
|
home-manager.users.me.programs.lan-mouse = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
authorized_fingerprints."0d:4f:2c:8a:46:d5:6a:e2:22:c9:02:89:39:da:75:69:2d:e9:32:39:d7:dc:e6:e2:50:d6:20:22:a5:26:d4:44" = "mac";
|
authorized_fingerprints."20:e2:a0:c1:e9:52:9b:72:d5:68:8c:7c:91:c0:ac:33:ba:ec:bc:61:73:e9:8e:c1:a8:30:1a:ea:ae:2b:55:33" = "mac";
|
||||||
port = 4410;
|
port = 4410;
|
||||||
clients = [
|
clients = [
|
||||||
{
|
{
|
||||||
position = "right";
|
position = "right";
|
||||||
hostname = "mac";
|
hostname = "mac";
|
||||||
activate_on_startup = true;
|
activate_on_startup = true;
|
||||||
ips = [ "192.168.1.33" ];
|
ips = [ "192.168.4.3" "100.100.55.117" ];
|
||||||
port = 4410;
|
port = 4410;
|
||||||
#enter_hook = "${pkgs.wl-clipboard}/bin/wl-paste | ${pkgs.openssh}/bin/ssh mac 'cat > ~/clipboard'";
|
|
||||||
#enter_hook = "/run/current-system/sw/bin/echo hooooooooooo > /home/me/p1";
|
|
||||||
enter_hook = "/run/current-system/sw/bin/cat /home/me/.cache/clipboard | /run/current-system/sw/bin/ssh mac 'cat >~/clipboard'";
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -155,10 +205,17 @@
|
|||||||
services.tailscale.enable = true;
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
services.resilio = {
|
services.resilio = {
|
||||||
enable = true;
|
enable = false;
|
||||||
enableWebUI = true;
|
enableWebUI = true;
|
||||||
|
httpListenAddr = "100.71.47.106";
|
||||||
|
checkForUpdates = false;
|
||||||
|
listeningPort = 44444;
|
||||||
};
|
};
|
||||||
users.users.me.homeMode = "770"; # important for resilio
|
users.users.me.homeMode = "770"; # important for resilio
|
||||||
|
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
||||||
|
44444 # resilio sync
|
||||||
|
9000 # resilio webui
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -193,11 +250,11 @@
|
|||||||
################# make firefox default browser
|
################# make firefox default browser
|
||||||
environment.sessionVariables.DEFAULT_BROWSER = "firefox"; # for electron apps
|
environment.sessionVariables.DEFAULT_BROWSER = "firefox"; # for electron apps
|
||||||
xdg.mime.defaultApplications = {
|
xdg.mime.defaultApplications = {
|
||||||
"text/html" = "firefox.desktop";
|
"text/html" = "firefox-nightly.desktop";
|
||||||
"x-scheme-handler/http" = "firefox.desktop";
|
"x-scheme-handler/http" = "firefox-nightly.desktop";
|
||||||
"x-scheme-handler/https" = "firefox.desktop";
|
"x-scheme-handler/https" = "firefox-nightly.desktop";
|
||||||
"x-scheme-handler/about" = "firefox.desktop";
|
"x-scheme-handler/about" = "firefox-nightly.desktop";
|
||||||
"x-scheme-handler/unknown" = "firefox.desktop";
|
"x-scheme-handler/unknown" = "firefox-nightly.desktop";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -214,6 +271,7 @@
|
|||||||
#../common/nixos-graphical.nix
|
#../common/nixos-graphical.nix
|
||||||
../common/nixos-wayland.nix
|
../common/nixos-wayland.nix
|
||||||
../common/building.nix
|
../common/building.nix
|
||||||
|
../common/nixos.nix
|
||||||
../mods/battery_monitor.nix
|
../mods/battery_monitor.nix
|
||||||
|
|
||||||
inputs.networkmanager.nixosModules.networkmanager
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
@@ -229,12 +287,17 @@
|
|||||||
#inputs.waveforms.nixosModule
|
#inputs.waveforms.nixosModule
|
||||||
];
|
];
|
||||||
|
|
||||||
services.udev.packages = [ inputs.waveforms.packages.${system}.adept2-runtime ];
|
|
||||||
users.users.rslsync.extraGroups = ["users"];
|
#services.udev.packages = [ inputs.waveforms.packages.${system}.adept2-runtime ];
|
||||||
|
#users.users.rslsync.extraGroups = ["users"];
|
||||||
|
|
||||||
# add myself to plugdev group for waveforms
|
# add myself to plugdev group for waveforms
|
||||||
# and incus-admin to use incus without sudo
|
# and incus-admin to use incus without sudo
|
||||||
users.users.me.extraGroups = [ "incus-admin" "plugdev" "rslsync" ];
|
users.users.me.extraGroups = [
|
||||||
|
"incus-admin" "plugdev"
|
||||||
|
#"rslsync"
|
||||||
|
"docker"
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
nixpkgs.config.permittedInsecurePackages = [
|
nixpkgs.config.permittedInsecurePackages = [
|
||||||
@@ -243,7 +306,14 @@
|
|||||||
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
inputs.waveforms.packages.${system}.waveforms
|
|
||||||
|
((builtins.getFlake "nixpkgs/96bc8fec15133d6056410ed3abae2fb9419fb545").legacyPackages.${system}.affine.overrideAttrs {
|
||||||
|
patches = [
|
||||||
|
../overlays/patches/affin-edgeless-right-click-drag.patch
|
||||||
|
];
|
||||||
|
})
|
||||||
|
|
||||||
|
#inputs.waveforms.packages.${system}.waveforms
|
||||||
intel-compute-runtime-legacy1
|
intel-compute-runtime-legacy1
|
||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
remmina
|
remmina
|
||||||
@@ -257,13 +327,6 @@
|
|||||||
slurp # screenshot functionality
|
slurp # screenshot functionality
|
||||||
wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
|
wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
|
||||||
mako # notification system developed by swaywm maintainer
|
mako # notification system developed by swaywm maintainer
|
||||||
(pkgs.wrapOBS {
|
|
||||||
plugins = with obs-studio-plugins; [
|
|
||||||
obs-ndi
|
|
||||||
obs-teleport
|
|
||||||
];
|
|
||||||
})
|
|
||||||
|
|
||||||
(writeShellScriptBin "davinci" ''
|
(writeShellScriptBin "davinci" ''
|
||||||
NIXPKGS_ALLOW_UNFREE=1 OCL_ICD_ENABLE_TRACE=True QT_QPA_PLATFORM=xcb nix run nixpkgs#davinci-resolve --impure -L
|
NIXPKGS_ALLOW_UNFREE=1 OCL_ICD_ENABLE_TRACE=True QT_QPA_PLATFORM=xcb nix run nixpkgs#davinci-resolve --impure -L
|
||||||
'')
|
'')
|
||||||
@@ -284,7 +347,7 @@
|
|||||||
dhcpcd
|
dhcpcd
|
||||||
looking-glass-client
|
looking-glass-client
|
||||||
swtpm
|
swtpm
|
||||||
win-virtio
|
virtio-win
|
||||||
];
|
];
|
||||||
|
|
||||||
# shedule nix builds with low priority, so the laptop is still usable while building something
|
# shedule nix builds with low priority, so the laptop is still usable while building something
|
||||||
@@ -390,6 +453,66 @@
|
|||||||
'';
|
'';
|
||||||
# */
|
# */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
################################ extra home-manager config for main #############################
|
||||||
|
home-manager.users.me.programs.bash = {
|
||||||
|
bashrcExtra = ''
|
||||||
|
|
||||||
|
function rp () {
|
||||||
|
host=$1
|
||||||
|
|
||||||
|
if [[ "$host" == "mosatop" ]]
|
||||||
|
then
|
||||||
|
xfreerdp /u:"c2vi" /v:mosatop /p:$(cat ${secretsDir}/mosatop-rdp-password) /dynamic-resolution +clipboard +auto-reconnect /wm-class:"Microsoft Windows"
|
||||||
|
|
||||||
|
elif [[ "$host" == "acern" ]]
|
||||||
|
then
|
||||||
|
xfreerdp /u:"seb" /v:acern /p:$(cat ${secretsDir}/acern-rdp-password) /dynamic-resolution +clipboard +auto-reconnect /wm-class:"Microsoft Windows"
|
||||||
|
|
||||||
|
elif [[ "$host" == "mwin" ]]
|
||||||
|
then
|
||||||
|
xfreerdp /u:"me" /v:mac:4400 /p:$(cat /home/me/secrets/win-vm-pwd) /dynamic-resolution +clipboard +auto-reconnect +home-drive /wm-class:"Microsoft Windows";
|
||||||
|
|
||||||
|
elif [[ "$host" == "win" ]]
|
||||||
|
then
|
||||||
|
xfreerdp /u:"me" /v:192.168.122.141 /p:$(cat /home/me/secrets/win-vm-pwd) /dynamic-resolution +clipboard +auto-reconnect +home-drive /wm-class:"Microsoft Windows";
|
||||||
|
|
||||||
|
elif [[ "$host" == "phone" ]]
|
||||||
|
then
|
||||||
|
ssh phone "source ~/.bashrc && on" &
|
||||||
|
${pkgs.rustdesk}/bin/rustdesk --connect 100.77.80.77
|
||||||
|
|
||||||
|
elif [[ "$host" == "vnc-fwin" ]]
|
||||||
|
then
|
||||||
|
${pkgs.remmina}/bin/remmina -c ${persistentDir}/remmina/fwin.remmina
|
||||||
|
|
||||||
|
elif [[ "$host" == "fwin" ]]
|
||||||
|
then
|
||||||
|
xfreerdp /u:"me" /v:fusu:9002 /p:$(cat /home/me/secrets/win-vm-pwd) /dynamic-resolution +clipboard +auto-reconnect +home-drive /wm-class:"Microsoft Windows";
|
||||||
|
|
||||||
|
elif [[ "$host" == "ki" ]]
|
||||||
|
then
|
||||||
|
${pkgs.remmina}/bin/remmina -c ${persistentDir}/remmina/ki.remmina
|
||||||
|
|
||||||
|
elif [[ "$host" == "mac" ]]
|
||||||
|
then
|
||||||
|
${pkgs.remmina}/bin/remmina -c ${persistentDir}/remmina/mac.remmina
|
||||||
|
|
||||||
|
elif [[ "$host" == "mandroid" ]]
|
||||||
|
then
|
||||||
|
${pkgs.remmina}/bin/remmina -c ${persistentDir}/remmina/mandroid.remmina
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
complete -W "mosatop acern phone mwin win fwin ki mac mandroid" rp
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################ my youtube blocking service #############################
|
################################ my youtube blocking service #############################
|
||||||
environment.etc."host.conf" = {
|
environment.etc."host.conf" = {
|
||||||
# needed so that firefox does not ignore the hosts file
|
# needed so that firefox does not ignore the hosts file
|
||||||
@@ -433,10 +556,6 @@
|
|||||||
|
|
||||||
services.samba.openFirewall = true;
|
services.samba.openFirewall = true;
|
||||||
|
|
||||||
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [
|
|
||||||
44444 # resilio sync
|
|
||||||
];
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
5357 # wsdd
|
5357 # wsdd
|
||||||
8888 # for general usage
|
8888 # for general usage
|
||||||
@@ -455,6 +574,7 @@
|
|||||||
53 # allow dns
|
53 # allow dns
|
||||||
48899 # GoodWe inverter discovery
|
48899 # GoodWe inverter discovery
|
||||||
4410 # lan-mouse
|
4410 # lan-mouse
|
||||||
|
41641 # tailscale
|
||||||
];
|
];
|
||||||
|
|
||||||
#networking.search = [ "c2vi.local" ];
|
#networking.search = [ "c2vi.local" ];
|
||||||
@@ -470,10 +590,10 @@
|
|||||||
uuid = "a02273d9-ad12-395e-8372-f61129635b6f";
|
uuid = "a02273d9-ad12-395e-8372-f61129635b6f";
|
||||||
type = "ethernet";
|
type = "ethernet";
|
||||||
autoconnect-priority = "-999";
|
autoconnect-priority = "-999";
|
||||||
interface-name = "enp1s0";
|
interface-name = "enp0s13f0u1u4u3";
|
||||||
};
|
};
|
||||||
ipv4 = {
|
ipv4 = {
|
||||||
address1 = "192.168.1.11/24,192.168.1.1";
|
address2 = "192.168.4.2/24";
|
||||||
dns = "1.1.1.1;";
|
dns = "1.1.1.1;";
|
||||||
method = "manual";
|
method = "manual";
|
||||||
};
|
};
|
||||||
@@ -530,6 +650,7 @@
|
|||||||
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
type = "wifi";
|
type = "wifi";
|
||||||
interface-name = "wlo1";
|
interface-name = "wlo1";
|
||||||
|
autoconnect-priority = "200";
|
||||||
};
|
};
|
||||||
|
|
||||||
wifi = {
|
wifi = {
|
||||||
@@ -550,6 +671,33 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gw = {
|
||||||
|
connection = {
|
||||||
|
id = "gw";
|
||||||
|
uuid = "de655c52-1af2-4b46-b7b2-8ddad9edb52f";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlo1";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/gw-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/gw-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
hec = {
|
hec = {
|
||||||
connection = {
|
connection = {
|
||||||
id = "hec";
|
id = "hec";
|
||||||
@@ -623,8 +771,8 @@
|
|||||||
id = "dhcp";
|
id = "dhcp";
|
||||||
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
||||||
type = "ethernet";
|
type = "ethernet";
|
||||||
autoconnect = "false";
|
autoconnect = "true";
|
||||||
interface-name = "enp1s0";
|
interface-name = "enp0s13f0u1u3";
|
||||||
};
|
};
|
||||||
|
|
||||||
ethernet = {
|
ethernet = {
|
||||||
@@ -718,17 +866,21 @@
|
|||||||
|
|
||||||
|
|
||||||
######################################### virtualisation ###############################
|
######################################### virtualisation ###############################
|
||||||
|
networking.nftables.enable = true;
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
virtualisation.libvirtd = {
|
virtualisation.libvirtd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
qemuOvmf = true;
|
#qemuOvmf = true;
|
||||||
qemuSwtpm = true;
|
qemuSwtpm = true;
|
||||||
#qemuOvmfPackage = pkgs.OVMFFull;
|
#qemuOvmfPackage = pkgs.OVMFFull;
|
||||||
|
extraConfig = ''
|
||||||
|
firewall_backend = "nftables"
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# see: https://github.com/NixOS/nixpkgs/issues/300081
|
# see: https://github.com/NixOS/nixpkgs/issues/300081
|
||||||
#disabledModules = [ "virtualisation/incus.nix" ];
|
#disabledModules = [ "virtualisation/incus.nix" ];
|
||||||
networking.nftables.enable = true;
|
|
||||||
# client package now separated...
|
# client package now separated...
|
||||||
#virtualisation.incus.clientPackage = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.incus;
|
#virtualisation.incus.clientPackage = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.incus;
|
||||||
virtualisation.incus.enable = true;
|
virtualisation.incus.enable = true;
|
||||||
@@ -773,9 +925,9 @@
|
|||||||
|
|
||||||
# boot.resumeDevice = "/swapfile";
|
# boot.resumeDevice = "/swapfile";
|
||||||
services.logind = {
|
services.logind = {
|
||||||
extraConfig = ''
|
#extraConfig = ''
|
||||||
HandlePowerKey=suspend-then-hibernate
|
#HandlePowerKey=suspend-then-hibernate
|
||||||
'';
|
#'';
|
||||||
lidSwitch = "lock";
|
lidSwitch = "lock";
|
||||||
lidSwitchExternalPower = "lock";
|
lidSwitchExternalPower = "lock";
|
||||||
lidSwitchDocked = "ignore";
|
lidSwitchDocked = "ignore";
|
||||||
@@ -784,6 +936,45 @@
|
|||||||
HibernateDelaySec=4h
|
HibernateDelaySec=4h
|
||||||
HibernateMode=shutdown
|
HibernateMode=shutdown
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
############################## swap and hibernate ###################################
|
||||||
|
/*
|
||||||
|
fileSystems."/home/me/work/things/ppc" = {
|
||||||
|
device = "https://dav.ppc.social";
|
||||||
|
fsType = "davfs";
|
||||||
|
options = [
|
||||||
|
"netdev"
|
||||||
|
"rw"
|
||||||
|
"user"
|
||||||
|
"uid=1000"
|
||||||
|
"filemode=0644"
|
||||||
|
"dirmode=0755"
|
||||||
|
"noauto"
|
||||||
|
"x-systemd.automount"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
services = {
|
||||||
|
davfs2 = {
|
||||||
|
enable = true;
|
||||||
|
davUser = "me";
|
||||||
|
settings = {
|
||||||
|
globalSection = {
|
||||||
|
gui_optimize = true;
|
||||||
|
file_refresh = 30;
|
||||||
|
};
|
||||||
|
sections = {
|
||||||
|
"/home/me/work/things/ppc" = {
|
||||||
|
gui_optimize = true;
|
||||||
|
file_refresh = 30;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
366
hosts/te.nix
Normal file
366
hosts/te.nix
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
{ lib, secretsDir, pkgs, inputs, unstable, ... }: let
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
#users.users.me.password = builtins.readFile "${secretsDir}/te-password";
|
||||||
|
#users.users.root.password = builtins.readFile "${secretsDir}/te-password";
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
../common/all.nix
|
||||||
|
../common/nixos.nix
|
||||||
|
../common/building.nix
|
||||||
|
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
../users/me/gui.nix
|
||||||
|
../users/root/default.nix
|
||||||
|
../common/nixos-wayland.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
|
networking.hostName = "te";
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
addresses = true;
|
||||||
|
domain = true;
|
||||||
|
hinfo = true;
|
||||||
|
userServices = true;
|
||||||
|
workstation = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
8888 # for general usage
|
||||||
|
9999 # for general usage
|
||||||
|
6000 # Xserver
|
||||||
|
6666 # vnc sway
|
||||||
|
5900 # vnc for win VM
|
||||||
|
5901 # vnc
|
||||||
|
5902 # vnc
|
||||||
|
4400 # rdp win VM
|
||||||
|
4401 # ssh for mandroid
|
||||||
|
4402 # random
|
||||||
|
4403 # random
|
||||||
|
4404 # random
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
48899 # GoodWe inverter discovery
|
||||||
|
4410 # lan-mouse
|
||||||
|
];
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{
|
||||||
|
device = "/swapfile";
|
||||||
|
size = 4 * 1024;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.kernelModules = [ "usbip_core" ];
|
||||||
|
boot.extraModprobeConfig = "options kvm_intel nested=1";
|
||||||
|
|
||||||
|
# to build rpi images
|
||||||
|
boot.binfmt.emulatedSystems = [
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualisation.libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemuOvmf = true;
|
||||||
|
qemuSwtpm = true;
|
||||||
|
#qemuOvmfPackage = pkgs.OVMFFull;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
linuxPackages.usbip
|
||||||
|
mount
|
||||||
|
efibootmgr
|
||||||
|
tcpdump
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
# require public key authentication for better security
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "no";
|
||||||
|
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services."sway@" = let
|
||||||
|
mySway = unstable.sway.overrideAttrs (prev: {
|
||||||
|
/*
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "WillPower3309";
|
||||||
|
repo = "swayfx";
|
||||||
|
rev = "";
|
||||||
|
hash = "";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "swaywm";
|
||||||
|
repo = "sway";
|
||||||
|
rev = "73c244fb4807a29c6599d42c15e8a8759225b2d6";
|
||||||
|
hash = "sha256-P2w1oRVUNBWajt8jZOxPXvBE29urbrhtORy+lfYqnF8=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
in {
|
||||||
|
enable = false;
|
||||||
|
after = [ "systemd-user-sessions.service" "dbus.socket" "systemd-logind.service" "getty@%i.service" "plymouth-deactivate.service" "plymouth-quit.service" ];
|
||||||
|
before = [ "graphical.target" ];
|
||||||
|
wants = [ "dbus.socket" "systemd-logind.service" "plymouth-deactivate.service" ];
|
||||||
|
wantedBy = [ "graphical.target" ];
|
||||||
|
conflicts = [ "getty@%i.service" ]; # "plymouth-quit.service" "plymouth-quit-wait.service"
|
||||||
|
|
||||||
|
restartIfChanged = false;
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${lib.getExe mySway}";
|
||||||
|
User = "me";
|
||||||
|
|
||||||
|
# ConditionPathExists = "/dev/tty0";
|
||||||
|
IgnoreSIGPIPE = "no";
|
||||||
|
|
||||||
|
# Log this user with utmp, letting it show up with commands 'w' and
|
||||||
|
# 'who'. This is needed since we replace (a)getty.
|
||||||
|
UtmpIdentifier = "%I";
|
||||||
|
UtmpMode = "user";
|
||||||
|
# A virtual terminal is needed.
|
||||||
|
TTYPath = "/dev/%I";
|
||||||
|
TTYReset = "yes";
|
||||||
|
TTYVHangup = "yes";
|
||||||
|
TTYVTDisallocate = "yes";
|
||||||
|
# Fail to start if not controlling the virtual terminal.
|
||||||
|
#StandardInput = "tty-fail";
|
||||||
|
#StandardOutput = "syslog";
|
||||||
|
#StandardError = "syslog";
|
||||||
|
# Set up a full (custom) user session for the user, required by Cage.
|
||||||
|
PAMName = "cage";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.extraConfig = "DefaultLimitNOFILE=2048";
|
||||||
|
|
||||||
|
###################################################### the kiosk stuff
|
||||||
|
|
||||||
|
services.dbus.enable = true;
|
||||||
|
|
||||||
|
fonts.enableDefaultPackages = true;
|
||||||
|
xdg.icons.enable = true;
|
||||||
|
gtk.iconCache.enable = true;
|
||||||
|
|
||||||
|
services.udisks2.enable = false;
|
||||||
|
hardware.opengl.enable = true;
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
|
systemd.defaultUnit = "graphical.target";
|
||||||
|
|
||||||
|
|
||||||
|
############################# networkmanager
|
||||||
|
|
||||||
|
# update name of wifi-interface
|
||||||
|
systemd.services.update-wifi-iface = {
|
||||||
|
description = "Update Wi-Fi interface name in network manager";
|
||||||
|
path = with pkgs; [
|
||||||
|
networkmanager # for nmcli
|
||||||
|
iproute2 # for ip
|
||||||
|
gawk # for awk
|
||||||
|
];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = "${pkgs.writeShellScriptBin "run" ''
|
||||||
|
name=$(ip link | awk -F: '/^[0-9]+: wl/ {print $2}' | sed 's/^ //')
|
||||||
|
nmcli connection modify pw connection.interface-name $name
|
||||||
|
''}/bin/run";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "Networkmanager.service" "network.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
networking.networkmanager.profiles = {
|
||||||
|
pw = {
|
||||||
|
connection = {
|
||||||
|
id = "pw";
|
||||||
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp3s0";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pt = {
|
||||||
|
connection = {
|
||||||
|
id = "pt";
|
||||||
|
uuid = "f028117e-9eef-47c1-8483-574f7ee798a4";
|
||||||
|
type = "bluetooth";
|
||||||
|
autoconnect = "false";
|
||||||
|
};
|
||||||
|
|
||||||
|
bluetooth = {
|
||||||
|
bdaddr = "E8:78:29:C4:BA:7C";
|
||||||
|
type = "panu";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.44.11/24";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hot = {
|
||||||
|
connection = {
|
||||||
|
id = "hot";
|
||||||
|
uuid = "ab51de8a-9742-465a-928b-be54a83ab6a3";
|
||||||
|
type = "wifi";
|
||||||
|
autoconnect = false;
|
||||||
|
interface-name = "wlp3s0";
|
||||||
|
};
|
||||||
|
wifi = {
|
||||||
|
mode = "ap";
|
||||||
|
ssid = "c2vi-te";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
share = {
|
||||||
|
connection = {
|
||||||
|
id = "share";
|
||||||
|
uuid = "f55f34e3-4595-4642-b1f6-df3185bc0a04";
|
||||||
|
type = "ethernet";
|
||||||
|
interface-name = "enp2s0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "C8:2A:14:0B:7F:3D";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.4.1/24";
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 = {
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
############ boot stuff
|
||||||
|
boot.plymouth.enable = false;
|
||||||
|
boot.loader.grub.enable = true;
|
||||||
|
boot.loader.grub.efiSupport = true;
|
||||||
|
boot.loader.grub.efiInstallAsRemovable = true;
|
||||||
|
boot.loader.grub.device = "nodev";
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ehci_pci"
|
||||||
|
"uhci_hcd"
|
||||||
|
"ohci_hcd"
|
||||||
|
"usb_storage"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
"scsi_mod"
|
||||||
|
];
|
||||||
|
boot.loader.grub.extraConfig = ''
|
||||||
|
set timeout=2
|
||||||
|
'';
|
||||||
|
|
||||||
|
############### disk config
|
||||||
|
# the flash drive in use for te
|
||||||
|
#disko.devices.disk.root.device = "/dev/disk/by-id/usb-Generic_Flash_Disk_FF830E8F-0:0";
|
||||||
|
disko.devices.disk.root.device = "/dev/disk/by-id/ata-KBG40ZNV512G_KIOXIA_70GPGA85QBV1";
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
root = {
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
|
||||||
|
ESP = {
|
||||||
|
size = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
biosboot = {
|
||||||
|
size = "2M";
|
||||||
|
type = "21686148-6449-6E6F-744E-656564454649"; # BIOS boot
|
||||||
|
};
|
||||||
|
|
||||||
|
root = {
|
||||||
|
size = "240G";
|
||||||
|
content = {
|
||||||
|
# LUKS passphrase will be prompted interactively only
|
||||||
|
type = "luks";
|
||||||
|
name = "crypted";
|
||||||
|
settings = {
|
||||||
|
allowDiscards = true;
|
||||||
|
};
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pub = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "exfat";
|
||||||
|
mountpoint = "/pub";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
349
hosts/ti.nix
Normal file
349
hosts/ti.nix
Normal file
@@ -0,0 +1,349 @@
|
|||||||
|
{ lib, pkgs, inputs, secretsDir, config, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
#system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
|
||||||
|
#inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
||||||
|
inputs.networkmanager.nixosModules.networkmanager
|
||||||
|
|
||||||
|
../common/all.nix
|
||||||
|
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
../users/me/headless.nix
|
||||||
|
|
||||||
|
##### project modules #####
|
||||||
|
|
||||||
|
# the module for the zwave setup
|
||||||
|
#"${workDir}/htl/labor/hackl/zwave.nix"
|
||||||
|
|
||||||
|
# labor nas project
|
||||||
|
# with this moduel it does not boot, it waits for /dev/disk/by-label/nas-storage
|
||||||
|
# "${workDir}/htl/labor/nas/nixos/lush-module.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
#nixpkgs.config.allowUnsupportedSystem = true;
|
||||||
|
#nixpkgs.hostPlatform.system = "aarch64-linux";
|
||||||
|
#nixpkgs.buildPlatform.system = "x86_64-linux";
|
||||||
|
|
||||||
|
# fix bluetooth
|
||||||
|
hardware = {
|
||||||
|
bluetooth = {
|
||||||
|
package = pkgs.bluez;
|
||||||
|
enable = true;
|
||||||
|
powerOnBoot = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# get usbip working
|
||||||
|
boot.extraModulePackages = [
|
||||||
|
config.boot.kernelPackages.usbip
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
#boot.kernelParams = lib.mkForce ["console=ttyS0,115200n8" "console=ttyAMA0,115200n8" "console=tty0" "nohibernate" "loglevel=7" ];
|
||||||
|
|
||||||
|
|
||||||
|
/* for cross compiling
|
||||||
|
#nixpkgs.hostPlatform.system = "aarch64-linux";
|
||||||
|
#nixpkgs.buildPlatform.system = "x86_64-linux";
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
|
||||||
|
(outerFinal: outerPrev: {
|
||||||
|
#https://github.com/adrienverge/openfortivpn/issues/446
|
||||||
|
#https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/tools/networking/openfortivpn/default.nix#L47
|
||||||
|
openfortivpn = outerPrev.openfortivpn.overrideAttrs (final: prev: {
|
||||||
|
configureFlags = prev.configureFlags or [] ++ [
|
||||||
|
"--disable-proc"
|
||||||
|
"--with-rt_dst=yes"
|
||||||
|
"--with-pppd=/usr/sbin/pppd"
|
||||||
|
];
|
||||||
|
});
|
||||||
|
})
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
services.blueman.enable = true;
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
linuxPackages.usbip
|
||||||
|
vim
|
||||||
|
bluez
|
||||||
|
git
|
||||||
|
];
|
||||||
|
|
||||||
|
# "${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix" creates a
|
||||||
|
# disk with this label on first boot. Therefore, we need to keep it. It is the
|
||||||
|
# only information from the installer image that we need to keep persistent
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/NIXOS_SD";
|
||||||
|
noCheck = true;
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
loader = {
|
||||||
|
generic-extlinux-compatible.enable = lib.mkDefault true;
|
||||||
|
grub.enable = lib.mkDefault false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
########################### ssh ############################
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [ 22 ];
|
||||||
|
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "no";
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
####################################### networking ##########################
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
3702 # wsdd
|
||||||
|
51820 # wireguard
|
||||||
|
67 # allow DHCP traffic
|
||||||
|
53 # allow dns
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
8888 # general use
|
||||||
|
9999 # general use
|
||||||
|
3240 # usbip
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.hostName = "ti";
|
||||||
|
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
networking.networkmanager.profiles = {
|
||||||
|
pw = {
|
||||||
|
connection = {
|
||||||
|
id = "pw";
|
||||||
|
uuid = "e0103dac-7da0-4e32-a01b-487b8c4c813c";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlan0";
|
||||||
|
autoconnect = true;
|
||||||
|
autoconnect-priority = "-200";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "true";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.20.21/24";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gw = {
|
||||||
|
connection = {
|
||||||
|
id = "gw";
|
||||||
|
uuid = "de655c52-1af2-4b46-b7b2-8ddad9edb52f";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlp2s0";
|
||||||
|
autoconnect-priority = "300";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "false";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/gw-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/gw-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
#address1 = "192.168.20.11/24";
|
||||||
|
dns = "1.1.1.1;8.8.8.8;";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hh40 = {
|
||||||
|
connection = {
|
||||||
|
id = "hh40";
|
||||||
|
uuid = "73a61cef-8f7b-4f42-ab3f-0066e0295bbc";
|
||||||
|
type = "wifi";
|
||||||
|
interface-name = "wlan0";
|
||||||
|
autoconnect = true;
|
||||||
|
autoconnect-priority = "-999";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi = {
|
||||||
|
hidden = "false";
|
||||||
|
mode = "infrastructure";
|
||||||
|
ssid = builtins.readFile "${secretsDir}/home-wifi-ssid";
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi-security = {
|
||||||
|
key-mgmt = "wpa-psk";
|
||||||
|
psk = builtins.readFile "${secretsDir}/home-wifi-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
method = "auto";
|
||||||
|
address1 = "192.168.1.37/24";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dhcp = {
|
||||||
|
connection = {
|
||||||
|
id = "dhcp";
|
||||||
|
uuid = "c006389a-1697-4f77-91c3-95b466f85f13";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = "true";
|
||||||
|
interface-name = "eth0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "DC:A6:32:CB:4D:5E";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.1.44/24,192.168.1.1";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
share = {
|
||||||
|
connection = {
|
||||||
|
id = "share";
|
||||||
|
uuid = "f55f34e3-4595-4642-b1f6-df3185bc0a04";
|
||||||
|
type = "ethernet";
|
||||||
|
autoconnect = false;
|
||||||
|
interface-name = "eth0";
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet = {
|
||||||
|
mac-address = "DC:A6:32:CB:4D:5E";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.4.1/24";
|
||||||
|
method = "shared";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 = {
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pt = {
|
||||||
|
connection = {
|
||||||
|
id = "pt";
|
||||||
|
uuid = "f028117e-9eef-47c1-8483-574f7ee798a4";
|
||||||
|
type = "bluetooth";
|
||||||
|
autoconnect = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bluetooth = {
|
||||||
|
bdaddr = "E8:78:29:C4:BA:7C";
|
||||||
|
type = "panu";
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "192.168.44.22/24";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
me = {
|
||||||
|
connection = {
|
||||||
|
id = "me";
|
||||||
|
uuid = "fe45d3bc-21c6-41ff-bc06-c936017c6e02";
|
||||||
|
type = "wireguard";
|
||||||
|
autoconnect = "true";
|
||||||
|
interface-name = "me0";
|
||||||
|
};
|
||||||
|
wireguard = {
|
||||||
|
listen-port = "51820";
|
||||||
|
private-key = builtins.readFile "${secretsDir}/wg-private-lush";
|
||||||
|
};
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "10.1.1.4/24";
|
||||||
|
method = "manual";
|
||||||
|
};
|
||||||
|
} // (import ../common/wg-peers.nix { inherit secretsDir; });
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
systemd.services.iwd.serviceConfig.Restart = "always";
|
||||||
|
/*
|
||||||
|
networking = {
|
||||||
|
interfaces."wlan0".useDHCP = true;
|
||||||
|
|
||||||
|
interfaces."eth0" = {
|
||||||
|
#name = "eth0";
|
||||||
|
ipv4.addresses = [
|
||||||
|
{ address = "192.168.5.5"; prefixLength = 24;}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
wireless = {
|
||||||
|
interfaces = [ "wlan0" ];
|
||||||
|
enable = true;
|
||||||
|
networks = {
|
||||||
|
seb-phone.psk = "hellogello";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
####################################### wireguard ##########################
|
||||||
|
/*
|
||||||
|
systemd.network.netdevs.me0 = {
|
||||||
|
enable = true;
|
||||||
|
wireguardPeers = import ../common/wg-peers.nix { inherit secretsDir; };
|
||||||
|
wireguardConfig = {
|
||||||
|
ListenPort = 51820;
|
||||||
|
PrivateKeyFile = "/etc/wireguard/secret.key";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.wireguard.interfaces = {
|
||||||
|
me = {
|
||||||
|
ips = [ "10.1.1.11/24" ];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
boot = {
|
||||||
|
kernelPackages = pkgs.linuxKernel.packages.linux_rpi4;
|
||||||
|
initrd.availableKernelModules = [ "xhci_pci" "usbhid" "usb_storage" ];
|
||||||
|
loader = {
|
||||||
|
grub.enable = false;
|
||||||
|
generic-extlinux-compatible.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
821
log
Normal file
821
log
Normal file
@@ -0,0 +1,821 @@
|
|||||||
|
warning: Git tree '/home/me/work/config' is dirty
|
||||||
|
evaluation warning: You have set specialArgs.pkgs, which means that options like nixpkgs.config
|
||||||
|
and nixpkgs.overlays will be ignored. If you wish to reuse an already created
|
||||||
|
pkgs, which you know is configured correctly for this NixOS configuration,
|
||||||
|
please import the `nixosModules.readOnlyPkgs` module from the nixpkgs flake or
|
||||||
|
`(modulesPath + "/misc/nixpkgs/read-only.nix"), and set `{ nixpkgs.pkgs = <your pkgs>; }`.
|
||||||
|
This properly disables the ignored options to prevent future surprises.
|
||||||
|
evaluation warning: nix-index-database: flake output `hmModules` has been renamed to `homeModules`
|
||||||
|
evaluation warning: In order to support declarative extension configuration,
|
||||||
|
extension installation has been moved from
|
||||||
|
programs.firefox.profiles.<profile>.extensions
|
||||||
|
to
|
||||||
|
programs.firefox.profiles.<profile>.extensions.packages
|
||||||
|
evaluation warning: 'system' has been renamed to/replaced by 'stdenv.hostPlatform.system'
|
||||||
|
error:
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1691:14:
|
||||||
|
1690| zipAttrsWith (
|
||||||
|
1691| n: values:
|
||||||
|
| ^
|
||||||
|
1692| let
|
||||||
|
|
||||||
|
… while calling the 'head' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1696:13:
|
||||||
|
1695| if length values == 1 || pred here (elemAt values 1) (head values) then
|
||||||
|
1696| head values
|
||||||
|
| ^
|
||||||
|
1697| else
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1188:17:
|
||||||
|
1187| mapAttrs (
|
||||||
|
1188| name: value:
|
||||||
|
| ^
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1189:85:
|
||||||
|
1188| name: value:
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
| ^
|
||||||
|
1190| );
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:275:71:
|
||||||
|
274| # For definitions that have an associated option
|
||||||
|
275| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options;
|
||||||
|
| ^
|
||||||
|
276|
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1118:7:
|
||||||
|
1117| // {
|
||||||
|
1118| value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
||||||
|
| ^
|
||||||
|
1119| inherit (res.defsFinal') highestPrio;
|
||||||
|
|
||||||
|
… while evaluating the option `system.build.toplevel':
|
||||||
|
|
||||||
|
… while evaluating the attribute 'mergedValue'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1192:5:
|
||||||
|
1191| # Type-check the remaining definitions, and merge them. Or throw if no definitions.
|
||||||
|
1192| mergedValue =
|
||||||
|
| ^
|
||||||
|
1193| if isDefined then
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1193:7:
|
||||||
|
1192| mergedValue =
|
||||||
|
1193| if isDefined then
|
||||||
|
| ^
|
||||||
|
1194| if type.merge ? v2 then
|
||||||
|
|
||||||
|
… while evaluating the attribute 'values'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1186:9:
|
||||||
|
1185| {
|
||||||
|
1186| values = defsSorted;
|
||||||
|
| ^
|
||||||
|
1187| inherit (defsFiltered) highestPrio;
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1180:11:
|
||||||
|
1179| # Avoid sorting if we don't have to.
|
||||||
|
1180| if any (def: def.value._type or "" == "order") defsFiltered.values then
|
||||||
|
| ^
|
||||||
|
1181| sortProperties defsFiltered.values
|
||||||
|
|
||||||
|
… while calling the 'any' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1180:14:
|
||||||
|
1179| # Avoid sorting if we don't have to.
|
||||||
|
1180| if any (def: def.value._type or "" == "order") defsFiltered.values then
|
||||||
|
| ^
|
||||||
|
1181| sortProperties defsFiltered.values
|
||||||
|
|
||||||
|
… while evaluating the attribute 'values'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1360:7:
|
||||||
|
1359| {
|
||||||
|
1360| values = concatMap (def: if getPrio def == highestPrio then [ (strip def) ] else [ ]) defs;
|
||||||
|
| ^
|
||||||
|
1361| inherit highestPrio;
|
||||||
|
|
||||||
|
… while calling the 'concatMap' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1360:16:
|
||||||
|
1359| {
|
||||||
|
1360| values = concatMap (def: if getPrio def == highestPrio then [ (strip def) ] else [ ]) defs;
|
||||||
|
| ^
|
||||||
|
1361| inherit highestPrio;
|
||||||
|
|
||||||
|
… while calling the 'concatMap' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1160:26:
|
||||||
|
1159| # Process mkMerge and mkIf properties.
|
||||||
|
1160| defsNormalized = concatMap (
|
||||||
|
| ^
|
||||||
|
1161| m:
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1161:11:
|
||||||
|
1160| defsNormalized = concatMap (
|
||||||
|
1161| m:
|
||||||
|
| ^
|
||||||
|
1162| map (
|
||||||
|
|
||||||
|
… while calling the 'map' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1162:11:
|
||||||
|
1161| m:
|
||||||
|
1162| map (
|
||||||
|
| ^
|
||||||
|
1163| value:
|
||||||
|
|
||||||
|
… while evaluating definitions from `/nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/activation/top-level.nix':
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1171:80:
|
||||||
|
1170| }
|
||||||
|
1171| ) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
|
||||||
|
| ^
|
||||||
|
1172| ) defs;
|
||||||
|
|
||||||
|
… while calling 'dischargeProperties'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1311:5:
|
||||||
|
1310| dischargeProperties =
|
||||||
|
1311| def:
|
||||||
|
| ^
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1312:5:
|
||||||
|
1311| def:
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
| ^
|
||||||
|
1313| concatMap dischargeProperties def.contents
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:805:21:
|
||||||
|
804| inherit (module) file;
|
||||||
|
805| inherit value;
|
||||||
|
| ^
|
||||||
|
806| }) module.config
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/activation/top-level.nix:81:26:
|
||||||
|
80| # Handle assertions and warnings
|
||||||
|
81| baseSystemAssertWarn = lib.asserts.checkAssertWarn config.assertions config.warnings baseSystem;
|
||||||
|
| ^
|
||||||
|
82|
|
||||||
|
|
||||||
|
… while calling 'checkAssertWarn'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/asserts.nix:193:27:
|
||||||
|
192| checkAssertWarn =
|
||||||
|
193| assertions: warnings: val:
|
||||||
|
| ^
|
||||||
|
194| let
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/asserts.nix:200:7:
|
||||||
|
199| else
|
||||||
|
200| showWarnings warnings val;
|
||||||
|
| ^
|
||||||
|
201|
|
||||||
|
|
||||||
|
… while calling 'showWarnings'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/trivial.nix:982:28:
|
||||||
|
981|
|
||||||
|
982| showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings;
|
||||||
|
| ^
|
||||||
|
983|
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/trivial.nix:982:33:
|
||||||
|
981|
|
||||||
|
982| showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings;
|
||||||
|
| ^
|
||||||
|
983|
|
||||||
|
|
||||||
|
… while calling 'foldr'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:139:14:
|
||||||
|
138| foldr =
|
||||||
|
139| op: nul: list:
|
||||||
|
| ^
|
||||||
|
140| let
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:144:5:
|
||||||
|
143| in
|
||||||
|
144| fold' 0;
|
||||||
|
| ^
|
||||||
|
145|
|
||||||
|
|
||||||
|
… while calling 'fold''
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:142:15:
|
||||||
|
141| len = length list;
|
||||||
|
142| fold' = n: if n == len then nul else op (elemAt list n) (fold' (n + 1));
|
||||||
|
| ^
|
||||||
|
143| in
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:142:18:
|
||||||
|
141| len = length list;
|
||||||
|
142| fold' = n: if n == len then nul else op (elemAt list n) (fold' (n + 1));
|
||||||
|
| ^
|
||||||
|
143| in
|
||||||
|
|
||||||
|
… while calling the 'length' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:141:13:
|
||||||
|
140| let
|
||||||
|
141| len = length list;
|
||||||
|
| ^
|
||||||
|
142| fold' = n: if n == len then nul else op (elemAt list n) (fold' (n + 1));
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/activation/top-level.nix:81:72:
|
||||||
|
80| # Handle assertions and warnings
|
||||||
|
81| baseSystemAssertWarn = lib.asserts.checkAssertWarn config.assertions config.warnings baseSystem;
|
||||||
|
| ^
|
||||||
|
82|
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1188:17:
|
||||||
|
1187| mapAttrs (
|
||||||
|
1188| name: value:
|
||||||
|
| ^
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1189:85:
|
||||||
|
1188| name: value:
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
| ^
|
||||||
|
1190| );
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:275:71:
|
||||||
|
274| # For definitions that have an associated option
|
||||||
|
275| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options;
|
||||||
|
| ^
|
||||||
|
276|
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1118:7:
|
||||||
|
1117| // {
|
||||||
|
1118| value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
||||||
|
| ^
|
||||||
|
1119| inherit (res.defsFinal') highestPrio;
|
||||||
|
|
||||||
|
… while evaluating the option `warnings':
|
||||||
|
|
||||||
|
(10 duplicate frames omitted)
|
||||||
|
|
||||||
|
… while evaluating definitions from `/nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix':
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1171:80:
|
||||||
|
1170| }
|
||||||
|
1171| ) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
|
||||||
|
| ^
|
||||||
|
1172| ) defs;
|
||||||
|
|
||||||
|
… while calling 'dischargeProperties'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1311:5:
|
||||||
|
1310| dischargeProperties =
|
||||||
|
1311| def:
|
||||||
|
| ^
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1312:5:
|
||||||
|
1311| def:
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
| ^
|
||||||
|
1313| concatMap dischargeProperties def.contents
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:805:21:
|
||||||
|
804| inherit (module) file;
|
||||||
|
805| inherit value;
|
||||||
|
| ^
|
||||||
|
806| }) module.config
|
||||||
|
|
||||||
|
… while calling the 'concatLists' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:494:7:
|
||||||
|
493| in
|
||||||
|
494| concatLists (
|
||||||
|
| ^
|
||||||
|
495| mapAttrsToList (
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:496:17:
|
||||||
|
495| mapAttrsToList (
|
||||||
|
496| name: service:
|
||||||
|
| ^
|
||||||
|
497| let
|
||||||
|
|
||||||
|
… while calling the 'concatLists' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:502:11:
|
||||||
|
501| in
|
||||||
|
502| concatLists [
|
||||||
|
| ^
|
||||||
|
503| (optional (type == "oneshot" && (restart == "always" || restart == "on-success"))
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:503:14:
|
||||||
|
502| concatLists [
|
||||||
|
503| (optional (type == "oneshot" && (restart == "always" || restart == "on-success"))
|
||||||
|
| ^
|
||||||
|
504| "Service '${name}.service' with 'Type=oneshot' cannot have 'Restart=always' or 'Restart=on-success'"
|
||||||
|
|
||||||
|
… while calling 'optional'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:777:20:
|
||||||
|
776| */
|
||||||
|
777| optional = cond: elem: if cond then [ elem ] else [ ];
|
||||||
|
| ^
|
||||||
|
778|
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:777:26:
|
||||||
|
776| */
|
||||||
|
777| optional = cond: elem: if cond then [ elem ] else [ ];
|
||||||
|
| ^
|
||||||
|
778|
|
||||||
|
|
||||||
|
… in the left operand of the AND (&&) operator
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:503:42:
|
||||||
|
502| concatLists [
|
||||||
|
503| (optional (type == "oneshot" && (restart == "always" || restart == "on-success"))
|
||||||
|
| ^
|
||||||
|
504| "Service '${name}.service' with 'Type=oneshot' cannot have 'Restart=always' or 'Restart=on-success'"
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/nixos/modules/system/boot/systemd.nix:498:20:
|
||||||
|
497| let
|
||||||
|
498| type = service.serviceConfig.Type or "";
|
||||||
|
| ^
|
||||||
|
499| restart = service.serviceConfig.Restart or "no";
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1188:17:
|
||||||
|
1187| mapAttrs (
|
||||||
|
1188| name: value:
|
||||||
|
| ^
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1189:85:
|
||||||
|
1188| name: value:
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
| ^
|
||||||
|
1190| );
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:275:71:
|
||||||
|
274| # For definitions that have an associated option
|
||||||
|
275| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options;
|
||||||
|
| ^
|
||||||
|
276|
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1118:7:
|
||||||
|
1117| // {
|
||||||
|
1118| value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
||||||
|
| ^
|
||||||
|
1119| inherit (res.defsFinal') highestPrio;
|
||||||
|
|
||||||
|
… while evaluating the option `systemd.services.home-manager-me.serviceConfig':
|
||||||
|
|
||||||
|
… while evaluating the attribute 'mergedValue'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1192:5:
|
||||||
|
1191| # Type-check the remaining definitions, and merge them. Or throw if no definitions.
|
||||||
|
1192| mergedValue =
|
||||||
|
| ^
|
||||||
|
1193| if isDefined then
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/types.nix:878:17:
|
||||||
|
877| headError = checkDefsForError check loc defs;
|
||||||
|
878| value = mapAttrs (
|
||||||
|
| ^
|
||||||
|
879| n: v:
|
||||||
|
|
||||||
|
… while calling the 'mapAttrs' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/types.nix:878:25:
|
||||||
|
877| headError = checkDefsForError check loc defs;
|
||||||
|
878| value = mapAttrs (
|
||||||
|
| ^
|
||||||
|
879| n: v:
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/types.nix:872:21:
|
||||||
|
871| # Meaning it is less lazy
|
||||||
|
872| filterAttrs (n: v: v.optionalValue ? value) (
|
||||||
|
| ^
|
||||||
|
873| zipAttrsWith (name: defs: mergeDefinitions (loc ++ [ name ]) elemType defs) (pushPositions defs)
|
||||||
|
|
||||||
|
… while calling 'filterAttrs'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:23:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… while calling the 'removeAttrs' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:28:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… while calling the 'filter' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:45:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:53:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… in the argument of the not operator
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:60:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:663:60:
|
||||||
|
662| */
|
||||||
|
663| filterAttrs = pred: set: removeAttrs set (filter (name: !pred name set.${name}) (attrNames set));
|
||||||
|
| ^
|
||||||
|
664|
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/types.nix:872:37:
|
||||||
|
871| # Meaning it is less lazy
|
||||||
|
872| filterAttrs (n: v: v.optionalValue ? value) (
|
||||||
|
| ^
|
||||||
|
873| zipAttrsWith (name: defs: mergeDefinitions (loc ++ [ name ]) elemType defs) (pushPositions defs)
|
||||||
|
|
||||||
|
… while evaluating the attribute 'optionalValue'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1256:5:
|
||||||
|
1255|
|
||||||
|
1256| optionalValue = if isDefined then { value = mergedValue; } else { };
|
||||||
|
| ^
|
||||||
|
1257| };
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1256:21:
|
||||||
|
1255|
|
||||||
|
1256| optionalValue = if isDefined then { value = mergedValue; } else { };
|
||||||
|
| ^
|
||||||
|
1257| };
|
||||||
|
|
||||||
|
(8 duplicate frames omitted)
|
||||||
|
|
||||||
|
… while evaluating definitions from `/nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/nixos':
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1171:80:
|
||||||
|
1170| }
|
||||||
|
1171| ) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
|
||||||
|
| ^
|
||||||
|
1172| ) defs;
|
||||||
|
|
||||||
|
… while calling 'dischargeProperties'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1311:5:
|
||||||
|
1310| dischargeProperties =
|
||||||
|
1311| def:
|
||||||
|
| ^
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1312:5:
|
||||||
|
1311| def:
|
||||||
|
1312| if def._type or "" == "merge" then
|
||||||
|
| ^
|
||||||
|
1313| concatMap dischargeProperties def.contents
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/types.nix:819:15:
|
||||||
|
818| inherit (def) file;
|
||||||
|
819| value = v;
|
||||||
|
| ^
|
||||||
|
820| }) def.value
|
||||||
|
|
||||||
|
… while calling the 'getAttr' builtin
|
||||||
|
at <nix/derivation-internal.nix>:50:17:
|
||||||
|
49| value = commonAttrs // {
|
||||||
|
50| outPath = builtins.getAttr outputName strict;
|
||||||
|
| ^
|
||||||
|
51| drvPath = strict.drvPath;
|
||||||
|
|
||||||
|
… while calling the 'derivationStrict' builtin
|
||||||
|
at <nix/derivation-internal.nix>:37:12:
|
||||||
|
36|
|
||||||
|
37| strict = derivationStrict drvAttrs;
|
||||||
|
| ^
|
||||||
|
38|
|
||||||
|
|
||||||
|
… while evaluating derivation 'home-manager-generation'
|
||||||
|
whose name attribute is located at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/stdenv/generic/make-derivation.nix:541:13
|
||||||
|
|
||||||
|
… while evaluating attribute 'buildCommand' of derivation 'home-manager-generation'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/trivial-builders/default.nix:80:17:
|
||||||
|
79| enableParallelBuilding = true;
|
||||||
|
80| inherit buildCommand name;
|
||||||
|
| ^
|
||||||
|
81| passAsFile = [ "buildCommand" ] ++ (derivationArgs.passAsFile or [ ]);
|
||||||
|
|
||||||
|
… while calling the 'getAttr' builtin
|
||||||
|
at <nix/derivation-internal.nix>:50:17:
|
||||||
|
49| value = commonAttrs // {
|
||||||
|
50| outPath = builtins.getAttr outputName strict;
|
||||||
|
| ^
|
||||||
|
51| drvPath = strict.drvPath;
|
||||||
|
|
||||||
|
… while calling the 'derivationStrict' builtin
|
||||||
|
at <nix/derivation-internal.nix>:37:12:
|
||||||
|
36|
|
||||||
|
37| strict = derivationStrict drvAttrs;
|
||||||
|
| ^
|
||||||
|
38|
|
||||||
|
|
||||||
|
… while evaluating derivation 'activation-script'
|
||||||
|
whose name attribute is located at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/stdenv/generic/make-derivation.nix:541:13
|
||||||
|
|
||||||
|
… while evaluating attribute 'text' of derivation 'activation-script'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/trivial-builders/default.nix:129:13:
|
||||||
|
128| inherit
|
||||||
|
129| text
|
||||||
|
| ^
|
||||||
|
130| executable
|
||||||
|
|
||||||
|
… while calling the 'concatStringsSep' builtin
|
||||||
|
at /nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/home-environment.nix:756:13:
|
||||||
|
755| if sortedCommands ? result then
|
||||||
|
756| lib.concatStringsSep "\n" (map mkCmd sortedCommands.result)
|
||||||
|
| ^
|
||||||
|
757| else
|
||||||
|
|
||||||
|
… while calling 'mkCmd'
|
||||||
|
at /nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/home-environment.nix:749:17:
|
||||||
|
748| let
|
||||||
|
749| mkCmd = res: ''
|
||||||
|
| ^
|
||||||
|
750| _iNote "Activating %s" "${res.name}"
|
||||||
|
|
||||||
|
… while evaluating the attribute 'data'
|
||||||
|
at /nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/lib/dag.nix:100:45:
|
||||||
|
99| {
|
||||||
|
100| result = map (v: { inherit (v) name data; }) sorted.result;
|
||||||
|
| ^
|
||||||
|
101| }
|
||||||
|
|
||||||
|
… while evaluating the attribute 'data'
|
||||||
|
at /nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/lib/dag.nix:92:9:
|
||||||
|
91| name = n;
|
||||||
|
92| data = v.data;
|
||||||
|
| ^
|
||||||
|
93| after = v.after ++ dagBefore dag n;
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/lib/dag.nix:92:16:
|
||||||
|
91| name = n;
|
||||||
|
92| data = v.data;
|
||||||
|
| ^
|
||||||
|
93| after = v.after ++ dagBefore dag n;
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1188:17:
|
||||||
|
1187| mapAttrs (
|
||||||
|
1188| name: value:
|
||||||
|
| ^
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/attrsets.nix:1189:85:
|
||||||
|
1188| name: value:
|
||||||
|
1189| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value
|
||||||
|
| ^
|
||||||
|
1190| );
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:275:71:
|
||||||
|
274| # For definitions that have an associated option
|
||||||
|
275| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options;
|
||||||
|
| ^
|
||||||
|
276|
|
||||||
|
|
||||||
|
… while evaluating the attribute 'value'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/modules.nix:1118:7:
|
||||||
|
1117| // {
|
||||||
|
1118| value = addErrorContext "while evaluating the option `${showOption loc}':" value;
|
||||||
|
| ^
|
||||||
|
1119| inherit (res.defsFinal') highestPrio;
|
||||||
|
|
||||||
|
… while evaluating the option `home-manager.users.me.home.activation.installPackages.data':
|
||||||
|
|
||||||
|
(10 duplicate frames omitted)
|
||||||
|
|
||||||
|
… while evaluating definitions from `/nix/store/s7l9ap273g9f7jkci4i2m6mi87lax03b-source/modules/home-environment.nix':
|
||||||
|
|
||||||
|
(6 duplicate frames omitted)
|
||||||
|
|
||||||
|
… while evaluating derivation 'home-manager-path'
|
||||||
|
whose name attribute is located at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/stdenv/generic/make-derivation.nix:541:13
|
||||||
|
|
||||||
|
… while evaluating attribute 'passAsFile' of derivation 'home-manager-path'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/trivial-builders/default.nix:81:9:
|
||||||
|
80| inherit buildCommand name;
|
||||||
|
81| passAsFile = [ "buildCommand" ] ++ (derivationArgs.passAsFile or [ ]);
|
||||||
|
| ^
|
||||||
|
82| }
|
||||||
|
|
||||||
|
… while evaluating the attribute 'passAsFile'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:114:9:
|
||||||
|
113| # XXX: The size is somewhat arbitrary
|
||||||
|
114| passAsFile = if builtins.stringLength pkgs >= 128 * 1024 then [ "pkgs" ] else [ ];
|
||||||
|
| ^
|
||||||
|
115| }
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:114:22:
|
||||||
|
113| # XXX: The size is somewhat arbitrary
|
||||||
|
114| passAsFile = if builtins.stringLength pkgs >= 128 * 1024 then [ "pkgs" ] else [ ];
|
||||||
|
| ^
|
||||||
|
115| }
|
||||||
|
|
||||||
|
… in the argument of the not operator
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:114:52:
|
||||||
|
113| # XXX: The size is somewhat arbitrary
|
||||||
|
114| passAsFile = if builtins.stringLength pkgs >= 128 * 1024 then [ "pkgs" ] else [ ];
|
||||||
|
| ^
|
||||||
|
115| }
|
||||||
|
|
||||||
|
… while calling the 'lessThan' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:114:52:
|
||||||
|
113| # XXX: The size is somewhat arbitrary
|
||||||
|
114| passAsFile = if builtins.stringLength pkgs >= 128 * 1024 then [ "pkgs" ] else [ ];
|
||||||
|
| ^
|
||||||
|
115| }
|
||||||
|
|
||||||
|
… while calling the 'stringLength' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:114:25:
|
||||||
|
113| # XXX: The size is somewhat arbitrary
|
||||||
|
114| passAsFile = if builtins.stringLength pkgs >= 128 * 1024 then [ "pkgs" ] else [ ];
|
||||||
|
| ^
|
||||||
|
115| }
|
||||||
|
|
||||||
|
… while calling the 'toJSON' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:109:16:
|
||||||
|
108| pathsToLinkJSON = builtins.toJSON pathsToLink;
|
||||||
|
109| pkgs = builtins.toJSON chosenOutputs;
|
||||||
|
| ^
|
||||||
|
110| extraPathsFrom = lib.optional includeClosures (writeClosure pathsForClosure);
|
||||||
|
|
||||||
|
… while evaluating list element at index 34
|
||||||
|
|
||||||
|
… while evaluating attribute 'paths'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:68:7:
|
||||||
|
67| chosenOutputs = map (drv: {
|
||||||
|
68| paths =
|
||||||
|
| ^
|
||||||
|
69| # First add the usual output(s): respect if user has chosen explicitly,
|
||||||
|
|
||||||
|
… while evaluating list element at index 0
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:68:7:
|
||||||
|
67| chosenOutputs = map (drv: {
|
||||||
|
68| paths =
|
||||||
|
| ^
|
||||||
|
69| # First add the usual output(s): respect if user has chosen explicitly,
|
||||||
|
|
||||||
|
… while calling the 'getAttr' builtin
|
||||||
|
at <nix/derivation-internal.nix>:50:17:
|
||||||
|
49| value = commonAttrs // {
|
||||||
|
50| outPath = builtins.getAttr outputName strict;
|
||||||
|
| ^
|
||||||
|
51| drvPath = strict.drvPath;
|
||||||
|
|
||||||
|
… while calling the 'derivationStrict' builtin
|
||||||
|
at <nix/derivation-internal.nix>:37:12:
|
||||||
|
36|
|
||||||
|
37| strict = derivationStrict drvAttrs;
|
||||||
|
| ^
|
||||||
|
38|
|
||||||
|
|
||||||
|
… while evaluating derivation 'python3-3.10.19-env'
|
||||||
|
whose name attribute is located at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/stdenv/generic/make-derivation.nix:541:13
|
||||||
|
|
||||||
|
… while evaluating attribute 'passAsFile' of derivation 'python3-3.10.19-env'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/trivial-builders/default.nix:81:9:
|
||||||
|
80| inherit buildCommand name;
|
||||||
|
81| passAsFile = [ "buildCommand" ] ++ (derivationArgs.passAsFile or [ ]);
|
||||||
|
| ^
|
||||||
|
82| }
|
||||||
|
|
||||||
|
(6 duplicate frames omitted)
|
||||||
|
|
||||||
|
… while calling the 'map' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/build-support/buildenv/default.nix:67:21:
|
||||||
|
66| let
|
||||||
|
67| chosenOutputs = map (drv: {
|
||||||
|
| ^
|
||||||
|
68| paths =
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/wrapper.nix:26:15:
|
||||||
|
25| let
|
||||||
|
26| paths = requiredPythonModules (extraLibs ++ [ python ]) ++ [
|
||||||
|
| ^
|
||||||
|
27| (runCommand "bin" { } ''
|
||||||
|
|
||||||
|
… while calling 'requiredPythonModules'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:94:5:
|
||||||
|
93| requiredPythonModules =
|
||||||
|
94| drvs:
|
||||||
|
| ^
|
||||||
|
95| let
|
||||||
|
|
||||||
|
… while calling the 'foldl'' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:98:5:
|
||||||
|
97| in
|
||||||
|
98| lib.unique (
|
||||||
|
| ^
|
||||||
|
99| [ python ] ++ modules ++ lib.concatLists (lib.catAttrs "requiredPythonModules" modules)
|
||||||
|
|
||||||
|
… while calling the 'concatLists' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:99:32:
|
||||||
|
98| lib.unique (
|
||||||
|
99| [ python ] ++ modules ++ lib.concatLists (lib.catAttrs "requiredPythonModules" modules)
|
||||||
|
| ^
|
||||||
|
100| );
|
||||||
|
|
||||||
|
… while calculating requiredPythonModules for python3.10-pandas-2.3.1:
|
||||||
|
|
||||||
|
… from call site
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:121:11:
|
||||||
|
120| requiredPythonModules = builtins.addErrorContext "while calculating requiredPythonModules for ${drv.name or drv.pname}:" (
|
||||||
|
121| requiredPythonModules drv.propagatedBuildInputs
|
||||||
|
| ^
|
||||||
|
122| );
|
||||||
|
|
||||||
|
… while calling 'requiredPythonModules'
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:94:5:
|
||||||
|
93| requiredPythonModules =
|
||||||
|
94| drvs:
|
||||||
|
| ^
|
||||||
|
95| let
|
||||||
|
|
||||||
|
… while calling the 'foldl'' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/python-packages-base.nix:98:5:
|
||||||
|
97| in
|
||||||
|
98| lib.unique (
|
||||||
|
| ^
|
||||||
|
99| [ python ] ++ modules ++ lib.concatLists (lib.catAttrs "requiredPythonModules" modules)
|
||||||
|
|
||||||
|
… while calling anonymous lambda
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:1857:25:
|
||||||
|
1856| */
|
||||||
|
1857| unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [ ];
|
||||||
|
| ^
|
||||||
|
1858|
|
||||||
|
|
||||||
|
… while evaluating a branch condition
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:1857:28:
|
||||||
|
1856| */
|
||||||
|
1857| unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [ ];
|
||||||
|
| ^
|
||||||
|
1858|
|
||||||
|
|
||||||
|
… while calling the 'elem' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/lists.nix:1857:31:
|
||||||
|
1856| */
|
||||||
|
1857| unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [ ];
|
||||||
|
| ^
|
||||||
|
1858|
|
||||||
|
|
||||||
|
… in the condition of the assert statement
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/lib/customisation.nix:412:15:
|
||||||
|
411| outPath =
|
||||||
|
412| assert condition;
|
||||||
|
| ^
|
||||||
|
413| drv.${outputName}.outPath;
|
||||||
|
|
||||||
|
… in the right operand of the IMPL (->) operator
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/mk-python-derivation.nix:464:11:
|
||||||
|
463| drv.disabled
|
||||||
|
464| -> throw "${removePrefix namePrefix drv.name} not supported for interpreter ${python.executable}"
|
||||||
|
| ^
|
||||||
|
465| ) { } drv
|
||||||
|
|
||||||
|
… while calling the 'throw' builtin
|
||||||
|
at /nix/store/ql735ybqjzwjdsjhywplx17cfvq9s1fm-source/pkgs/development/interpreters/python/mk-python-derivation.nix:464:14:
|
||||||
|
463| drv.disabled
|
||||||
|
464| -> throw "${removePrefix namePrefix drv.name} not supported for interpreter ${python.executable}"
|
||||||
|
| ^
|
||||||
|
465| ) { } drv
|
||||||
|
|
||||||
|
error: numpy-2.3.4 not supported for interpreter python3.10
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
192.168.122.194 uwu
|
|
||||||
192.168.122.126 lako
|
|
||||||
127.0.0.1 localhost
|
127.0.0.1 localhost
|
||||||
100.70.54.18 obsidian.c2vi.dev
|
192.168.3.1 gw.c2vi.dev
|
||||||
192.168.1.2 mc.ppc.social
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
192.168.1.6 hpm
|
192.168.1.6 hpm
|
||||||
|
192.168.1.4 fe
|
||||||
192.168.1.2 fusu
|
192.168.1.2 fusu
|
||||||
192.168.1.2 files
|
192.168.1.2 files
|
||||||
192.168.1.5 acern
|
192.168.1.5 acern
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
10.1.1.3 phone
|
|
||||||
10.1.1.11 main
|
|
||||||
|
|
||||||
14
misc/my-hosts-t
Normal file
14
misc/my-hosts-t
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
100.71.47.106 main
|
||||||
|
100.77.80.77 phone
|
||||||
|
100.70.54.18 fusu
|
||||||
|
100.70.54.18 files
|
||||||
|
100.81.207.107 lush
|
||||||
|
100.76.146.119 tab
|
||||||
|
100.70.39.65 waydroid
|
||||||
|
100.107.67.76 te
|
||||||
|
100.100.55.117 mac
|
||||||
|
100.96.201.42 ki
|
||||||
|
100.107.101.77 fe
|
||||||
|
100.107.101.77 fesu
|
||||||
|
100.93.225.52 fasu
|
||||||
|
100.91.200.82 fwin
|
||||||
2
mods/eGTouch-driver/module.nix
Normal file
2
mods/eGTouch-driver/module.nix
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{ pkgs, ... }: {
|
||||||
|
}
|
||||||
52
mods/eGTouch-driver/pkg.nix
Normal file
52
mods/eGTouch-driver/pkg.nix
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
{ stdenv
|
||||||
|
, fetchurl
|
||||||
|
, p7zip
|
||||||
|
|
||||||
|
# wether to build the version to be used with Xorg or not Xorg (eg wayland)
|
||||||
|
, forXorg ? false
|
||||||
|
, ...
|
||||||
|
}: let
|
||||||
|
|
||||||
|
nameExtension = (
|
||||||
|
if stdenv.isx86_64 or stdenv.isx86_32
|
||||||
|
then "x"
|
||||||
|
else if stdenv.isAarch64 or stdenv.isAarch32 or stdenv.isMips
|
||||||
|
then "ma"
|
||||||
|
else builtins.throw "unsupported system" ""
|
||||||
|
);
|
||||||
|
fileName = "eGTouch_v2.5.13219.L-${nameExtension}";
|
||||||
|
pathArch =
|
||||||
|
if stdenv.isAarch64 then "eGTouchAARCH64"
|
||||||
|
else builtins.throw "unsupported arch..." "";
|
||||||
|
pathBackend =
|
||||||
|
if forXorg then "${pathArch}withX"
|
||||||
|
else "${pathArch}nonX";
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
version = "2.5";
|
||||||
|
pname = "eGTouch";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
p7zip # to unpack the src
|
||||||
|
];
|
||||||
|
|
||||||
|
# there are seperate tarballs... one for x86 and one for arm andmips
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://www.eeti.com/touch_driver/Linux/20240510/${fileName}.7z";
|
||||||
|
hash =
|
||||||
|
if nameExtension == "x"
|
||||||
|
then "sha256-zZlM4finrnvtxBmqKm4Sl0zQeFz/7yCTuTjXEwmolVI="
|
||||||
|
else "";
|
||||||
|
};
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
7z x $src
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp ./${fileName}/${pathArch}/${pathBackend}/eGTouch $out/bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
||||||
78
mods/fesu-hosting-base.nix
Normal file
78
mods/fesu-hosting-base.nix
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{ lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
experimental-features = lib.mkDefault "nix-command flakes";
|
||||||
|
trusted-users = [ "root" "@wheel" ];
|
||||||
|
};
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
boot.tmp.useTmpfs = true;
|
||||||
|
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
programs.bash.shellInit = ''
|
||||||
|
cd /root/host
|
||||||
|
export HISTFILE=$HOME/host/bash_history
|
||||||
|
export HISTSIZE=10000
|
||||||
|
'';
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
|
||||||
|
# required for ppc wiki publish.sh
|
||||||
|
git
|
||||||
|
rsync
|
||||||
|
nodejs
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPAgNB1nsKZ5KXnmR6KWjQLfwhFKDispw24o8M7g/nbR me@bitwarden"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/mCDzCBE2J1jGnEhhtttIRMKkXMi1pKCAEkxu+FAim me@main"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGw5kYmBQl8oolNg2VUlptvvSrFSESfeuWpsXRovny0x me@phone"
|
||||||
|
];
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
# require public key authentication for better security
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "yes";
|
||||||
|
|
||||||
|
settings.X11Forwarding = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
system.activationScripts.addDefaultRoute = {
|
||||||
|
text = ''
|
||||||
|
ip route add default via dev eth0
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
defaultGateway = "192.168.1.4";
|
||||||
|
# Use systemd-resolved inside the container
|
||||||
|
# Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686
|
||||||
|
useHostResolvConf = lib.mkForce false;
|
||||||
|
#useNetworkd = true;
|
||||||
|
/*
|
||||||
|
interfaces.eth0.ipv4.routes = [
|
||||||
|
{
|
||||||
|
via = "192.168.101.1";
|
||||||
|
address = "default";
|
||||||
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
services.resolved.enable = true;
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
#systemd.network.enable = true;
|
||||||
|
|
||||||
|
system.stateVersion = "24.11";
|
||||||
|
}
|
||||||
443
mods/fesu-services.nix
Normal file
443
mods/fesu-services.nix
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
{ pkgs, dataDir, config, inputs, system, lib, secretsDir, ... }:
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
## ports
|
||||||
|
- 49001 ssh me-hosting
|
||||||
|
- 49002 ssh ppc-hosting
|
||||||
|
- 49003 ssh pcmc
|
||||||
|
- 49004 ssh fe
|
||||||
|
|
||||||
|
- 49101 mc first
|
||||||
|
- 49102 mc first voice
|
||||||
|
- 49103 mc nonstop
|
||||||
|
- 49104 mc nonstop voice
|
||||||
|
- 49105 mc lage0
|
||||||
|
- 49106 mc lage0 voice
|
||||||
|
- 49107 mc lobby
|
||||||
|
- 49108 mc lobby voice
|
||||||
|
- 49109 mc compass
|
||||||
|
- 49110 mc compass voice
|
||||||
|
- 49111 mc second
|
||||||
|
- 49112 mc second voice
|
||||||
|
- 49113 mc second bedrock
|
||||||
|
- 49114 mc lobby bedrock
|
||||||
|
|
||||||
|
- me hosting ports
|
||||||
|
- 8000 wiki site
|
||||||
|
- 8001 lage0 site
|
||||||
|
- 8002 plausible site
|
||||||
|
- 8003 ppc-site
|
||||||
|
- 8004 instant db
|
||||||
|
- 8005 instant webui
|
||||||
|
|
||||||
|
- ppc hosting ports
|
||||||
|
- 8000 dav
|
||||||
|
- 8001 affine
|
||||||
|
- 8002 git
|
||||||
|
- 8003 git ssh
|
||||||
|
|
||||||
|
## hosting container ips (on the interface br-proxy
|
||||||
|
- fusu 192.168.1.2
|
||||||
|
- me-hosting 192.168.1.20
|
||||||
|
- ppc-hosting 192.168.1.21
|
||||||
|
- pcmc 192.168.1.23
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
let
|
||||||
|
/**
|
||||||
|
thanks: @melektron
|
||||||
|
This builder creates a small shell script that wraps arion to specify
|
||||||
|
it to operate on a specific registered arion service identified by `srv_name`.
|
||||||
|
This can be used to manage the docker-compose functionality of an arion service
|
||||||
|
that is defined in the NixOS system, independently from the systemctl service that
|
||||||
|
starts it. If you start/stop compose projects using this, you should first stop
|
||||||
|
the systemctl service.
|
||||||
|
*/
|
||||||
|
createArionServiceManager = srv_name: setup: (
|
||||||
|
pkgs.writeShellScriptBin "manage-arion-${srv_name}" ''
|
||||||
|
echo operating on: ${config.virtualisation.arion.projects."${srv_name}".settings.out.dockerComposeYaml}
|
||||||
|
${setup}
|
||||||
|
${pkgs.lib.getExe inputs.arion.packages."${system}".arion} --prebuilt-file ${config.virtualisation.arion.projects."${srv_name}".settings.out.dockerComposeYaml} $@
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
|
basicTraefikSettingAttrs = configs: extraRouters: extraServices: let
|
||||||
|
tmp = map (val: basicTraefikSetting val) configs;
|
||||||
|
routerList = map (val: val.routers) tmp;
|
||||||
|
serviceList = map (val: val.services) tmp;
|
||||||
|
routers = lib.attrsets.mergeAttrsList (routerList ++ extraRouters);
|
||||||
|
services = lib.attrsets.mergeAttrsList (serviceList ++ extraServices);
|
||||||
|
in { inherit routers services; };
|
||||||
|
|
||||||
|
basicTraefikSetting = { name, domain, host, port }: let
|
||||||
|
host_ip =
|
||||||
|
if host == "me-hosting" then "192.168.1.20"
|
||||||
|
else if host == "pcmc" then "192.168.1.23"
|
||||||
|
else if host == "ppc-hosting" then "192.168.1.21"
|
||||||
|
else if host == "fesu" then "192.168.1.4"
|
||||||
|
else host;
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
impotrs = [
|
||||||
|
"${inputs.hetzner_ddns}/release/nixos_module.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
routers.${name} = {
|
||||||
|
rule = "Host(`${domain}`)";
|
||||||
|
service = name;
|
||||||
|
tls = {
|
||||||
|
certResolver = "LE";
|
||||||
|
domains = [
|
||||||
|
{ main = domain; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.${name}.loadBalancer.servers = [
|
||||||
|
{ url = "http://${host_ip}:${builtins.toString port}"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
"${inputs.hetzner_ddns}/release/NixOS/nixos_module.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.arion
|
||||||
|
|
||||||
|
# Do install the docker CLI to talk to podman.
|
||||||
|
# Not needed when virtualisation.docker.enable = true;
|
||||||
|
pkgs.docker-client
|
||||||
|
|
||||||
|
# add all the service managers
|
||||||
|
];
|
||||||
|
|
||||||
|
############################ virtualisation #########################
|
||||||
|
# Arion works with Docker, but for NixOS-based containers, you need Podman
|
||||||
|
# since NixOS 21.05.
|
||||||
|
virtualisation.docker.enable = false;
|
||||||
|
virtualisation.podman.enable = true;
|
||||||
|
virtualisation.podman.dockerSocket.enable = true;
|
||||||
|
virtualisation.libvirtd.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
virtualisation.arion = {
|
||||||
|
backend = "podman-socket";
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraUsers.me.extraGroups = ["podman"];
|
||||||
|
|
||||||
|
# incus
|
||||||
|
virtualisation.incus.enable = true;
|
||||||
|
users.users.me.extraGroups = [
|
||||||
|
"incus-admin"
|
||||||
|
];
|
||||||
|
networking.nftables.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ networking #########################
|
||||||
|
boot.kernel.sysctl = {
|
||||||
|
"net.ipv4.ip_forward" = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ dyndns #########################
|
||||||
|
systemd.services.hetzner_ddns.serviceConfig = {
|
||||||
|
User = "me";
|
||||||
|
Group = "users";
|
||||||
|
};
|
||||||
|
services.hetzner_ddns = {
|
||||||
|
protections = false;
|
||||||
|
enable = true;
|
||||||
|
api_key_file = "/home/me/secrets/hetzner_ddns_key";
|
||||||
|
zones = [
|
||||||
|
{
|
||||||
|
domain = "c2vi.dev";
|
||||||
|
records = [
|
||||||
|
{
|
||||||
|
name = "home";
|
||||||
|
type = "A";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
domain = "ppc.social";
|
||||||
|
records = [
|
||||||
|
{
|
||||||
|
name = "@";
|
||||||
|
type = "A";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ containers #########################
|
||||||
|
|
||||||
|
# me-hosting container
|
||||||
|
containers.me-hosting = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
privateUsers = "pick";
|
||||||
|
#hostAddress = "192.168.100.10";
|
||||||
|
hostBridge = "br0";
|
||||||
|
#localAddress = "192.168.100.11";
|
||||||
|
localAddress = "192.168.1.20/24";
|
||||||
|
extraFlags = [ "--system-call-filter=@keyring" ];
|
||||||
|
allowedDevices = [
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/net/tun";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/fuse";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
bindMounts."data-dir" = {
|
||||||
|
mountPoint = "/root/host:idmap";
|
||||||
|
hostPath = "${dataDir}/me-hosting";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# see: https://github.com/systemd/systemd/issues/27994
|
||||||
|
bindMounts."/run/sys" = {
|
||||||
|
hostPath = "/sys";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
forwardPorts = [
|
||||||
|
{
|
||||||
|
hostPort = 49001;
|
||||||
|
containerPort = 22;
|
||||||
|
protocol = "tcp";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
imports = [
|
||||||
|
./fesu-hosting-base.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# ppc-hosting container
|
||||||
|
containers.ppc-hosting = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
privateUsers = "pick";
|
||||||
|
#hostAddress = "192.168.100.12";
|
||||||
|
hostBridge = "br0";
|
||||||
|
#localAddress = "192.168.100.13";
|
||||||
|
localAddress = "192.168.1.21/24";
|
||||||
|
extraFlags = [ "--system-call-filter=@keyring" ];
|
||||||
|
allowedDevices = [
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/net/tun";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/fuse";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
bindMounts."data-dir" = {
|
||||||
|
mountPoint = "/root/host:idmap";
|
||||||
|
hostPath = "${dataDir}/ppc-hosting";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# see: https://github.com/systemd/systemd/issues/27994
|
||||||
|
bindMounts."/run/sys" = {
|
||||||
|
hostPath = "/sys";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
forwardPorts = [
|
||||||
|
{
|
||||||
|
hostPort = 49002;
|
||||||
|
containerPort = 22;
|
||||||
|
protocol = "tcp";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
imports = [
|
||||||
|
./fesu-hosting-base.nix
|
||||||
|
];
|
||||||
|
users.users.root = {
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICuH2ilZeIQrr9wYtBtQyRD5oaVkuLImjm9EIGfn+wqw" # Mr3DAlien
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# pcmc container
|
||||||
|
containers.pcmc = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
privateUsers = "pick";
|
||||||
|
#hostAddress = "192.168.100.14";
|
||||||
|
hostBridge = "br0";
|
||||||
|
#localAddress = "192.168.100.15";
|
||||||
|
localAddress = "192.168.1.23/24";
|
||||||
|
extraFlags = [ "--system-call-filter=@keyring" ];
|
||||||
|
allowedDevices = [
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/net/tun";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modifier = "rwm";
|
||||||
|
node = "/dev/fuse";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
bindMounts."data-dir" = {
|
||||||
|
mountPoint = "/root/host:idmap";
|
||||||
|
hostPath = "${dataDir}/pcmc";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# see: https://github.com/systemd/systemd/issues/27994
|
||||||
|
bindMounts."/run/sys" = {
|
||||||
|
hostPath = "/sys";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
forwardPorts = [
|
||||||
|
{ # ssh port
|
||||||
|
hostPort = 49003;
|
||||||
|
containerPort = 22;
|
||||||
|
protocol = "tcp";
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++ # add all mc server ports as tcp
|
||||||
|
(map (port: {
|
||||||
|
hostPort = port;
|
||||||
|
containerPort = port;
|
||||||
|
protocol = "tcp";
|
||||||
|
}) (lib.range 49100 49200))
|
||||||
|
++ # add all mc server ports as udp
|
||||||
|
(map (port: {
|
||||||
|
hostPort = port;
|
||||||
|
containerPort = port;
|
||||||
|
protocol = "udp";
|
||||||
|
}) (lib.range 49100 49200))
|
||||||
|
;
|
||||||
|
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
imports = [
|
||||||
|
./fesu-hosting-base.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ compass app #########################
|
||||||
|
systemd.services.compass = {
|
||||||
|
enable = true;
|
||||||
|
description = "Compass Bot Deployment";
|
||||||
|
unitConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
User = "server";
|
||||||
|
Group = "server";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = "500s";
|
||||||
|
ExecStart = "${lib.getExe inputs.compass.packages.${system}.default} --data ${dataDir}/compass --config ${dataDir}/compass/config.json --db ${dataDir}/compass/compass.db --settings ${dataDir}/compass/settings.json";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ traefik #########################
|
||||||
|
services.traefik = {
|
||||||
|
enable = true;
|
||||||
|
#dataDir = "${dataDir}/traefik";
|
||||||
|
|
||||||
|
staticConfigOptions = {
|
||||||
|
|
||||||
|
entryPoints = {
|
||||||
|
web = {
|
||||||
|
address = ":80";
|
||||||
|
asDefault = true;
|
||||||
|
http.redirections.entrypoint = {
|
||||||
|
to = "websecure";
|
||||||
|
scheme = "https";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
websecure = {
|
||||||
|
address = ":443";
|
||||||
|
asDefault = true;
|
||||||
|
http.tls.certResolver = "LE";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
log = {
|
||||||
|
level = "TRACE";
|
||||||
|
#filePath = "${config.services.traefik.dataDir}/traefik.log";
|
||||||
|
#format = "json";
|
||||||
|
};
|
||||||
|
|
||||||
|
certificatesResolvers.LE.acme = {
|
||||||
|
email = "c2vi.dev@gmail.com";
|
||||||
|
storage = "${config.services.traefik.dataDir}/acme.json";
|
||||||
|
httpChallenge.entryPoint = "web";
|
||||||
|
};
|
||||||
|
|
||||||
|
api.dashboard = true;
|
||||||
|
api.insecure = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamicConfigOptions = {
|
||||||
|
http = (basicTraefikSettingAttrs
|
||||||
|
# basic configs
|
||||||
|
[
|
||||||
|
{ name = "wiki-site"; domain = "wiki.ppc.social"; host = "me-hosting"; port = 8000; }
|
||||||
|
{ name = "lage0-site"; domain = "lage0.c2vi.dev"; host = "me-hosting"; port = 8001; }
|
||||||
|
{ name = "plausible"; domain = "plausible.c2vi.dev"; host = "me-hosting"; port = 8002; }
|
||||||
|
{ name = "ppc-site"; domain = "ppc.social"; host = "me-hosting"; port = 8003; }
|
||||||
|
{ name = "compass-site"; domain = "compass.ppc.social"; host = "fesu"; port = 3000; }
|
||||||
|
{ name = "dav"; domain = "dav.ppc.social"; host = "ppc-hosting"; port = 8000; }
|
||||||
|
{ name = "instant"; domain = "instant.ppc.social"; host = "me-hosting"; port = 8004; }
|
||||||
|
{ name = "instant-backend"; domain = "instant-backend.ppc.social"; host = "me-hosting"; port = 8005; }
|
||||||
|
{ name = "isotoke-website"; domain = "isotoke.ppc.social"; host = "192.168.1.26"; port = 80; }
|
||||||
|
{ name = "affine"; domain = "affine.ppc.social"; host = "ppc-hosting"; port = 8001; }
|
||||||
|
{ name = "gitea"; domain = "git.ppc.social"; host = "ppc-hosting"; port = 8002; }
|
||||||
|
]
|
||||||
|
|
||||||
|
# extraRouters (full configs)
|
||||||
|
[
|
||||||
|
]
|
||||||
|
|
||||||
|
# extraServices (full configs)
|
||||||
|
[
|
||||||
|
]);
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
48
mods/fusu-services.nix
Normal file
48
mods/fusu-services.nix
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{ pkgs, dataDir, config, inputs, system, ... }: let
|
||||||
|
|
||||||
|
/**
|
||||||
|
thanks: @melektron
|
||||||
|
This builder creates a small shell script that wraps arion to specify
|
||||||
|
it to operate on a specific registered arion service identified by `srv_name`.
|
||||||
|
This can be used to manage the docker-compose functionality of an arion service
|
||||||
|
that is defined in the NixOS system, independently from the systemctl service that
|
||||||
|
starts it. If you start/stop compose projects using this, you should first stop
|
||||||
|
the systemctl service.
|
||||||
|
*/
|
||||||
|
createArionServiceManager = srv_name: setup: (
|
||||||
|
pkgs.writeShellScriptBin "manage-arion-${srv_name}" ''
|
||||||
|
echo operating on: ${config.virtualisation.arion.projects."${srv_name}".settings.out.dockerComposeYaml}
|
||||||
|
${setup}
|
||||||
|
${pkgs.lib.getExe inputs.arion.packages."${system}".arion} --prebuilt-file ${config.virtualisation.arion.projects."${srv_name}".settings.out.dockerComposeYaml} $@
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.arion
|
||||||
|
|
||||||
|
# Do install the docker CLI to talk to podman.
|
||||||
|
# Not needed when virtualisation.docker.enable = true;
|
||||||
|
pkgs.docker-client
|
||||||
|
|
||||||
|
# add all the service managers
|
||||||
|
];
|
||||||
|
|
||||||
|
# Arion works with Docker, but for NixOS-based containers, you need Podman
|
||||||
|
# since NixOS 21.05.
|
||||||
|
virtualisation.docker.enable = false;
|
||||||
|
virtualisation.podman.enable = true;
|
||||||
|
virtualisation.podman.dockerSocket.enable = true;
|
||||||
|
|
||||||
|
users.extraUsers.me.extraGroups = ["podman"];
|
||||||
|
|
||||||
|
|
||||||
|
virtualisation.arion = {
|
||||||
|
backend = "podman-socket";
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
105
mods/le-disk-setup.nix
Normal file
105
mods/le-disk-setup.nix
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
|
||||||
|
# future setup of using disko to format my raspi sd-card
|
||||||
|
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image.nix"
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/profiles/base.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.loader.grub.enable = false;
|
||||||
|
boot.loader.generic-extlinux-compatible.enable = true;
|
||||||
|
|
||||||
|
boot.consoleLogLevel = lib.mkDefault 7;
|
||||||
|
|
||||||
|
# The serial ports listed here are:
|
||||||
|
# - ttyS0: for Tegra (Jetson TX1)
|
||||||
|
# - ttyAMA0: for QEMU's -machine virt
|
||||||
|
boot.kernelParams = [
|
||||||
|
"console=ttyS0,115200n8"
|
||||||
|
"console=ttyAMA0,115200n8"
|
||||||
|
"console=tty0"
|
||||||
|
];
|
||||||
|
|
||||||
|
sdImage = {
|
||||||
|
populateFirmwareCommands =
|
||||||
|
let
|
||||||
|
configTxt = pkgs.writeText "config.txt" ''
|
||||||
|
[pi3]
|
||||||
|
kernel=u-boot-rpi3.bin
|
||||||
|
|
||||||
|
# Otherwise the serial output will be garbled.
|
||||||
|
core_freq=250
|
||||||
|
|
||||||
|
[pi02]
|
||||||
|
kernel=u-boot-rpi3.bin
|
||||||
|
|
||||||
|
[pi4]
|
||||||
|
kernel=u-boot-rpi4.bin
|
||||||
|
enable_gic=1
|
||||||
|
armstub=armstub8-gic.bin
|
||||||
|
|
||||||
|
# Otherwise the resolution will be weird in most cases, compared to
|
||||||
|
# what the pi3 firmware does by default.
|
||||||
|
disable_overscan=1
|
||||||
|
|
||||||
|
# Supported in newer board revisions
|
||||||
|
arm_boost=1
|
||||||
|
|
||||||
|
[cm4]
|
||||||
|
# Enable host mode on the 2711 built-in XHCI USB controller.
|
||||||
|
# This line should be removed if the legacy DWC2 controller is required
|
||||||
|
# (e.g. for USB device mode) or if USB support is not required.
|
||||||
|
otg_mode=1
|
||||||
|
|
||||||
|
[all]
|
||||||
|
# Boot in 64-bit mode.
|
||||||
|
arm_64bit=1
|
||||||
|
|
||||||
|
# U-Boot needs this to work, regardless of whether UART is actually used or not.
|
||||||
|
# Look in arch/arm/mach-bcm283x/Kconfig in the U-Boot tree to see if this is still
|
||||||
|
# a requirement in the future.
|
||||||
|
enable_uart=1
|
||||||
|
|
||||||
|
# Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
|
||||||
|
# when attempting to show low-voltage or overtemperature warnings.
|
||||||
|
avoid_warnings=1
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
''
|
||||||
|
(cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/)
|
||||||
|
|
||||||
|
# Add the config
|
||||||
|
cp ${configTxt} firmware/config.txt
|
||||||
|
|
||||||
|
# Add pi3 specific files
|
||||||
|
cp ${pkgs.ubootRaspberryPi3_64bit}/u-boot.bin firmware/u-boot-rpi3.bin
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-2-b.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-3-b.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-3-b-plus.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-cm3.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-zero-2.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-zero-2-w.dtb firmware/
|
||||||
|
|
||||||
|
# Add pi4 specific files
|
||||||
|
cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
|
||||||
|
cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-400.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4.dtb firmware/
|
||||||
|
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4s.dtb firmware/
|
||||||
|
'';
|
||||||
|
populateRootCommands = ''
|
||||||
|
mkdir -p ./files/boot
|
||||||
|
${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
28
mods/nix-on-droid-base-module.nix
Normal file
28
mods/nix-on-droid-base-module.nix
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{ ... }: {
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
allowSFTP = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
X11UseLocalhost no
|
||||||
|
PasswordAuthentication no
|
||||||
|
KbdInteractiveAuthentication no
|
||||||
|
PermitRootLogin no
|
||||||
|
X11Forwarding yes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.useUserPackages = false;
|
||||||
|
|
||||||
|
home-manager.config = {
|
||||||
|
home.stateVersion = "23.05";
|
||||||
|
|
||||||
|
home.file.".ssh/authorized_keys".text = ''
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPAgNB1nsKZ5KXnmR6KWjQLfwhFKDispw24o8M7g/nbR me@bitwarden
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/mCDzCBE2J1jGnEhhtttIRMKkXMi1pKCAEkxu+FAim me@main
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGw5kYmBQl8oolNg2VUlptvvSrFSESfeuWpsXRovny0x me@phone
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
83
mods/nix-on-droid-pkgs.nix
Normal file
83
mods/nix-on-droid-pkgs.nix
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Copyright (c) 2019-2024, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
# copied from: https://github.com/nix-community/nix-on-droid/blob/1c306c07b3e99ab79b967ead32f9af7b8672a7ef/pkgs/default.nix
|
||||||
|
|
||||||
|
{ nixpkgs
|
||||||
|
, system # system to compile for, user-facing name of targetSystem
|
||||||
|
, _nativeSystem ? null # system to cross-compile from, see flake.nix
|
||||||
|
, nixOnDroidChannelURL ? null
|
||||||
|
, nixpkgsChannelURL ? null
|
||||||
|
, nixOnDroidFlakeURL ? null
|
||||||
|
, nix-on-droid-flake
|
||||||
|
, home-manager-flake
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
nativeSystem = if _nativeSystem == null then system else _nativeSystem;
|
||||||
|
nixDirectory = callPackage "${nix-on-droid-flake}/pkgs/nix-directory.nix" { inherit system; };
|
||||||
|
initialPackageInfo = import "${nixDirectory}/nix-support/package-info.nix";
|
||||||
|
|
||||||
|
pkgs = import nixpkgs { system = nativeSystem; };
|
||||||
|
|
||||||
|
urlOptionValue = url: envVar:
|
||||||
|
let
|
||||||
|
envValue = builtins.getEnv envVar;
|
||||||
|
in
|
||||||
|
pkgs.lib.mkIf
|
||||||
|
(envValue != "" || url != null)
|
||||||
|
(if url == null then envValue else url);
|
||||||
|
|
||||||
|
modules = import "${nix-on-droid-flake}/modules" {
|
||||||
|
inherit pkgs;
|
||||||
|
targetSystem = system;
|
||||||
|
|
||||||
|
home-manager-path = home-manager-flake;
|
||||||
|
|
||||||
|
isFlake = true;
|
||||||
|
|
||||||
|
config = {
|
||||||
|
imports = [
|
||||||
|
"${nix-on-droid-flake}/modules/build/initial-build.nix"
|
||||||
|
./nix-on-droid-base-module.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
_module.args = {
|
||||||
|
inherit initialPackageInfo;
|
||||||
|
pkgs = pkgs.lib.mkForce pkgs; # to override ./modules/nixpkgs/config.nix
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "24.05";
|
||||||
|
|
||||||
|
# Fix invoking bash after initial build.
|
||||||
|
user.shell = "${initialPackageInfo.bash}/bin/bash";
|
||||||
|
|
||||||
|
build = {
|
||||||
|
channel = {
|
||||||
|
nixpkgs = urlOptionValue nixpkgsChannelURL "NIXPKGS_CHANNEL_URL";
|
||||||
|
nix-on-droid = urlOptionValue nixOnDroidChannelURL "NIX_ON_DROID_CHANNEL_URL";
|
||||||
|
};
|
||||||
|
|
||||||
|
flake.nix-on-droid = urlOptionValue nixOnDroidFlakeURL "NIX_ON_DROID_FLAKE_URL";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
callPackage = pkgs.lib.callPackageWith (
|
||||||
|
pkgs // customPkgs // {
|
||||||
|
inherit (modules) config;
|
||||||
|
inherit callPackage nixpkgs nixDirectory initialPackageInfo;
|
||||||
|
targetSystem = system;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
customPkgs = {
|
||||||
|
bootstrap = callPackage "${nix-on-droid-flake}/pkgs/bootstrap.nix" { };
|
||||||
|
bootstrapZip = callPackage "${nix-on-droid-flake}/pkgs/bootstrap-zip.nix" { };
|
||||||
|
prootTermux = callPackage "${nix-on-droid-flake}/pkgs/cross-compiling/proot-termux.nix" { };
|
||||||
|
tallocStatic = callPackage "${nix-on-droid-flake}/pkgs/cross-compiling/talloc-static.nix" { };
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
inherit (modules) config;
|
||||||
|
inherit customPkgs;
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
sha256 = "sha256-vRqYQd5OaYXAc74Jlg8twBGDr9YxP+Mk1ZY9JGJTmvc=";
|
sha256 = "sha256-vRqYQd5OaYXAc74Jlg8twBGDr9YxP+Mk1ZY9JGJTmvc=";
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoHash = "sha256-xz+pi6awwDeiISGqJs5DxqFdryc5mY8wMuds1ZXRr1Q=";
|
cargoHash = "sha256-RoDXIPCjygdmG9dfDMtKiSdj2rgDAfxkKUXkIUAWotI=";
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "Command line utilities for the Simple Voice Chat Minecraft Mod";
|
description = "Command line utilities for the Simple Voice Chat Minecraft Mod";
|
||||||
|
|||||||
8
mybin/ru
8
mybin/ru
@@ -21,6 +21,10 @@ elif [ "$1" == "du" ]
|
|||||||
then
|
then
|
||||||
du -d 1 -h $2 | sort -h -r
|
du -d 1 -h $2 | sort -h -r
|
||||||
|
|
||||||
|
elif [ "$1" == "g" ]
|
||||||
|
then
|
||||||
|
ping 1.1.1.1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -162,9 +166,7 @@ sudo systemctl hibernate
|
|||||||
|
|
||||||
elif [ "$1" == "suspend" ]
|
elif [ "$1" == "suspend" ]
|
||||||
then
|
then
|
||||||
sudo systemctl suspend-then-hibernate
|
sudo systemctl suspend
|
||||||
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
nur.nix
2
nur.nix
@@ -14,6 +14,8 @@ in pkgs.lib.attrsets.genAttrs names (name: (pkgs.callPackage "${pwd}/mods/nurPkg
|
|||||||
|
|
||||||
imap-backup = pkgs.callPackage ./mods/imap-backup/package.nix {};
|
imap-backup = pkgs.callPackage ./mods/imap-backup/package.nix {};
|
||||||
|
|
||||||
|
eGTouch = pkgs.callPackage ./mods/eGTouch-driver/pkg.nix {};
|
||||||
|
|
||||||
/* fails for nur evaluations
|
/* fails for nur evaluations
|
||||||
iio-hyprland = let
|
iio-hyprland = let
|
||||||
repo = pkgs.fetchFromGitHub {
|
repo = pkgs.fetchFromGitHub {
|
||||||
|
|||||||
22
overlays/patches/affin-edgeless-right-click-drag.patch
Normal file
22
overlays/patches/affin-edgeless-right-click-drag.patch
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
diff --git a/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts b/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts
|
||||||
|
index c1abe0aea..b86367ca5 100644
|
||||||
|
--- a/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts
|
||||||
|
+++ b/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts
|
||||||
|
@@ -54,7 +54,7 @@ export class PanTool extends BaseTool<PanToolOption> {
|
||||||
|
|
||||||
|
override mounted(): void {
|
||||||
|
this.addHook('pointerDown', evt => {
|
||||||
|
- const shouldPanWithMiddle = evt.raw.button === MouseButton.MIDDLE;
|
||||||
|
+ const shouldPanWithMiddle = evt.raw.button === MouseButton.SECONDARY;
|
||||||
|
|
||||||
|
if (!shouldPanWithMiddle) {
|
||||||
|
return;
|
||||||
|
@@ -111,7 +111,7 @@ export class PanTool extends BaseTool<PanToolOption> {
|
||||||
|
});
|
||||||
|
|
||||||
|
const dispose = on(document, 'pointerup', evt => {
|
||||||
|
- if (evt.button === MouseButton.MIDDLE) {
|
||||||
|
+ if (evt.button === MouseButton.SECONDARY) {
|
||||||
|
restoreToPrevious();
|
||||||
|
}
|
||||||
|
dispose();
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{ secretsDir, confDir, hostname, self, pkgs, config, system, inputs, workDir, ... }:
|
{ lib, secretsDir, confDir, hostname, self, pkgs, config, system, workDir, ... }:
|
||||||
{
|
{
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
|
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
# check the window size after each command and, if necessary,
|
# check the window size after each command and, if necessary,
|
||||||
# update the values of LINES and COLUMNS.
|
# update the values of LINES and COLUMNS.
|
||||||
"checkwinsize"
|
"checkwinsize"
|
||||||
|
|
||||||
# If set, the pattern "**" used in a pathname expansion context will
|
# If set, the pattern "**" used in a pathname expansion context will
|
||||||
# match all files and zero or more directories and subdirectories.
|
# match all files and zero or more directories and subdirectories.
|
||||||
"globstar"
|
"globstar"
|
||||||
@@ -34,18 +33,22 @@
|
|||||||
# is needed to that ssh works
|
# is needed to that ssh works
|
||||||
# TERM = "xterm";
|
# TERM = "xterm";
|
||||||
|
|
||||||
# my prompt
|
|
||||||
PS1 = ''\[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] ❯❯❯ '';
|
|
||||||
|
|
||||||
TEST = "hiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
TEST = "hiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
|
archive-video = "${lib.getExe pkgs.yt-dlp} -f \"bv*+ba/b\" --merge-output-format mp4 --embed-thumbnail --write-thumbnail --convert-thumbnails png --add-metadata -o \"%(title)s.%(ext)s\"";
|
||||||
|
|
||||||
|
#zed="WAYLAND_DISPLAY= zeditor";
|
||||||
|
npm="pnpm";
|
||||||
md="~/work/modules/modules/dev/run";
|
md="~/work/modules/modules/dev/run";
|
||||||
mize="~/work/mize/mize";
|
mize="~/work/mize/mize";
|
||||||
m="~/work/mize/mize";
|
m="~/work/mize/mize";
|
||||||
|
|
||||||
|
c2="~/work/c2-system/cli/target/debug/system-c2-cli";
|
||||||
|
|
||||||
ports = "${pkgs.lsof}/bin/lsof -i -P -n";
|
ports = "${pkgs.lsof}/bin/lsof -i -P -n";
|
||||||
losetup = "${pkgs.util-linux}/bin/losetup";
|
losetup = "${pkgs.util-linux}/bin/losetup";
|
||||||
u = "sudo umount ~/mnt";
|
u = "sudo umount ~/mnt";
|
||||||
@@ -63,7 +66,7 @@
|
|||||||
shutdown = "echo try harder.... xD";
|
shutdown = "echo try harder.... xD";
|
||||||
npw = "nmcli c up pw";
|
npw = "nmcli c up pw";
|
||||||
flex = "neofetch | lolcat";
|
flex = "neofetch | lolcat";
|
||||||
kwoche = "curl https://kalenderwoche.celll.net/?api=1; echo";
|
kwoche = "curl -k https://kalenderwoche.celll.net/?api=1; echo";
|
||||||
psg = "ps -e | grep";
|
psg = "ps -e | grep";
|
||||||
vilias = "nvim -c 'set syntax=bash' ${confDir}/common/programs/bash.nix";
|
vilias = "nvim -c 'set syntax=bash' ${confDir}/common/programs/bash.nix";
|
||||||
stl = "sudo systemctl";
|
stl = "sudo systemctl";
|
||||||
@@ -115,9 +118,16 @@
|
|||||||
# my prompt
|
# my prompt
|
||||||
if [[ "${hostname}" == "main" ]]
|
if [[ "${hostname}" == "main" ]]
|
||||||
then
|
then
|
||||||
export PS1="\[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] ❯❯❯ "
|
#export PS1="\[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] ❯❯❯ "
|
||||||
|
#export PS1="\[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] > "
|
||||||
|
# \n\[\033[1;34m\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\$\[\033[0m\]
|
||||||
|
#export PS1="\W > ";
|
||||||
|
|
||||||
|
export PS1="\[\033[01;34m\]\W\033[00m ❯❯❯ "
|
||||||
else
|
else
|
||||||
export PS1="\033[1;32m${hostname}❯ \[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] ❯❯❯ "
|
#export PS1="\033[1;32m${hostname}❯ \[\033[01;34m\]\W\[\033[00m\]\[\033[01;32m\]\[\033[00m\] ❯❯❯ "
|
||||||
|
|
||||||
|
export PS1="\033[1;32m${hostname}\[\033[01;34m\] \W\033[00m ❯❯❯ "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@@ -135,31 +145,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function rp () {
|
|
||||||
host=$1
|
|
||||||
|
|
||||||
if [[ "$host" == "mosatop" ]]
|
|
||||||
then
|
|
||||||
xfreerdp /u:"c2vi" /v:mosatop /p:$(cat ${secretsDir}/mosatop-rdp-password) /dynamic-resolution +clipboard +auto-reconnect /wm-class:"Microsoft Windows"
|
|
||||||
|
|
||||||
elif [[ "$host" == "acern" ]]
|
|
||||||
then
|
|
||||||
xfreerdp /u:"seb" /v:acern /p:$(cat ${secretsDir}/acern-rdp-password) /dynamic-resolution +clipboard +auto-reconnect /wm-class:"Microsoft Windows"
|
|
||||||
|
|
||||||
elif [[ "$host" == "mwin" ]]
|
|
||||||
then
|
|
||||||
xfreerdp /u:"me" /v:mac:4400 /p:$(cat /home/me/secrets/win-vm-pwd) /dynamic-resolution +clipboard +auto-reconnect +home-drive /wm-class:"Microsoft Windows";
|
|
||||||
|
|
||||||
elif [[ "$host" == "win" ]]
|
|
||||||
then
|
|
||||||
xfreerdp /u:"me" /v:192.168.122.141 /p:$(cat /home/me/secrets/win-vm-pwd) /dynamic-resolution +clipboard +auto-reconnect +home-drive /wm-class:"Microsoft Windows";
|
|
||||||
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
complete -W "mosatop acern" rp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# function to create a tmpdir, to use for some temporary work....
|
# function to create a tmpdir, to use for some temporary work....
|
||||||
# made this, to not just keep cluttering my $HOME... with all kinds of projects
|
# made this, to not just keep cluttering my $HOME... with all kinds of projects
|
||||||
function mt () {
|
function mt () {
|
||||||
@@ -211,6 +196,7 @@
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tph(){
|
tph(){
|
||||||
if [[ "$1" == "" ]]
|
if [[ "$1" == "" ]]
|
||||||
then
|
then
|
||||||
|
|||||||
@@ -13,10 +13,19 @@
|
|||||||
cmakeFlags = prev.cmakeFlags or [] ++ [ "-DENABLE_SWAY=ON" ];
|
cmakeFlags = prev.cmakeFlags or [] ++ [ "-DENABLE_SWAY=ON" ];
|
||||||
});
|
});
|
||||||
|
|
||||||
mylf = pkgs.lf.overrideAttrs (final: prev: {
|
oldpkgs = (builtins.getFlake "nixpkgs/release-25.05").legacyPackages.${system};
|
||||||
|
mylf = oldpkgs.lf.overrideAttrs (final: prev: {
|
||||||
patches = (prev.patches or [ ]) ++ [
|
patches = (prev.patches or [ ]) ++ [
|
||||||
./lf-filter.patch
|
./lf-filter.patch
|
||||||
];
|
];
|
||||||
|
/*
|
||||||
|
src = pkgs.fetchFromGitHub { # use the old v35 version of lf... so that my patch applies
|
||||||
|
owner = "gokcehan";
|
||||||
|
repo = "lf";
|
||||||
|
rev = "r35";
|
||||||
|
hash = "sha256-0ZyIbEKiQ9l30gqHlpW7l/6/TzqVRvnKk9c2FiQ6E6Y=";
|
||||||
|
};
|
||||||
|
*/
|
||||||
checkPhase = "";
|
checkPhase = "";
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,7 +61,7 @@
|
|||||||
exiftool # (metadata/audio, and file detection for .webm files)
|
exiftool # (metadata/audio, and file detection for .webm files)
|
||||||
jq # (json and metadata)
|
jq # (json and metadata)
|
||||||
lynx # (html/web pages)
|
lynx # (html/web pages)
|
||||||
poppler_utils # pdftoppm # (pdf)
|
poppler-utils # pdftoppm # (pdf)
|
||||||
odt2txt # (odt)
|
odt2txt # (odt)
|
||||||
imagemagick # convert from imagemagick (fonts)
|
imagemagick # convert from imagemagick (fonts)
|
||||||
atool # (archives)
|
atool # (archives)
|
||||||
@@ -105,7 +114,7 @@
|
|||||||
|
|
||||||
enable = true;
|
enable = true;
|
||||||
commands = {
|
commands = {
|
||||||
dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"'';
|
dragon-out = ''%${pkgs.dragon-drop}/bin/xdragon -a -x "$fx"'';
|
||||||
editor-open = ''$$EDITOR $f'';
|
editor-open = ''$$EDITOR $f'';
|
||||||
mkdir = ''
|
mkdir = ''
|
||||||
''${{
|
''${{
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
ccls
|
||||||
|
];
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
withPython3 = true;
|
withPython3 = true;
|
||||||
@@ -25,6 +29,16 @@
|
|||||||
"rust-analyzer.diagnostics.enable" = true;
|
"rust-analyzer.diagnostics.enable" = true;
|
||||||
"rust-analyzer.checkOnSave.enable" = false;
|
"rust-analyzer.checkOnSave.enable" = false;
|
||||||
"languageserver" = {
|
"languageserver" = {
|
||||||
|
"ccls" = {
|
||||||
|
"command" = "ccls";
|
||||||
|
"filetypes" = ["c" "cpp" "objc" "objcpp"];
|
||||||
|
"rootPatterns" = [".ccls" "compile_commands.json" ".vim/" ".git/" ".hg/"];
|
||||||
|
"initializationOptions" = {
|
||||||
|
"cache" = {
|
||||||
|
"directory" = "/tmp/ccls";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
"slint" = {
|
"slint" = {
|
||||||
"filetypes" = [ "slint" ];
|
"filetypes" = [ "slint" ];
|
||||||
"command" = "slint-lsp";
|
"command" = "slint-lsp";
|
||||||
@@ -45,10 +59,11 @@
|
|||||||
"filetypes" = [ "nix" ];
|
"filetypes" = [ "nix" ];
|
||||||
"rootPatterns" = [ "flake.nix" ];
|
"rootPatterns" = [ "flake.nix" ];
|
||||||
};
|
};
|
||||||
"typst" = {
|
#"typst" = {
|
||||||
"command" = "${pkgs.typst-lsp}/bin/typst-lsp";
|
# error: 'typst-lsp' has been removed due to lack of upstream maintenance, consider using 'tinymist' instead
|
||||||
"filetypes" = [ "typ" "typst" ];
|
#"command" = "${pkgs.typst-lsp}/bin/typst-lsp";
|
||||||
};
|
#"filetypes" = [ "typ" "typst" ];
|
||||||
|
#};
|
||||||
};
|
};
|
||||||
"svelte.enable-ts-plugin" = true;
|
"svelte.enable-ts-plugin" = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,6 +40,29 @@
|
|||||||
port = 49388;
|
port = 49388;
|
||||||
user = "server";
|
user = "server";
|
||||||
};
|
};
|
||||||
|
fwin = {
|
||||||
|
user = "me";
|
||||||
|
hostname = "fwin";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
feh = {
|
||||||
|
user = "root";
|
||||||
|
hostname = "100.107.101.77";
|
||||||
|
port = 49001;
|
||||||
|
};
|
||||||
|
ppc-hosting = {
|
||||||
|
user = "root";
|
||||||
|
hostname = "100.107.101.77";
|
||||||
|
port = 49002;
|
||||||
|
};
|
||||||
|
pcmc = {
|
||||||
|
user = "root";
|
||||||
|
hostname = "100.107.101.77";
|
||||||
|
port = 49003;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
phone = {
|
phone = {
|
||||||
user = "u0_a345";
|
user = "u0_a345";
|
||||||
port = 8022;
|
port = 8022;
|
||||||
@@ -78,6 +101,18 @@
|
|||||||
user = "me";
|
user = "me";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fe = {
|
||||||
|
port = 22;
|
||||||
|
hostname = "fe";
|
||||||
|
user = "me";
|
||||||
|
};
|
||||||
|
|
||||||
|
fes = {
|
||||||
|
port = 22;
|
||||||
|
hostname = "fe";
|
||||||
|
user = "server";
|
||||||
|
};
|
||||||
|
|
||||||
fusus = {
|
fusus = {
|
||||||
port = 49388;
|
port = 49388;
|
||||||
hostname = "fusu";
|
hostname = "fusu";
|
||||||
|
|||||||
36
programs/thunderbird.nix
Normal file
36
programs/thunderbird.nix
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{ pkgs, config, persistentDir, ... }: {
|
||||||
|
|
||||||
|
## thunderbird settings
|
||||||
|
programs.thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
profiles.me = {
|
||||||
|
isDefault = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
## mail archiveing...
|
||||||
|
|
||||||
|
|
||||||
|
## email accounts
|
||||||
|
/*
|
||||||
|
accounts.email.accounts.sewi-gmail = {
|
||||||
|
flavor = "gmail.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
accounts.email.accounts.c2vi-gmail = {
|
||||||
|
flavor = "gmail.com";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
# not working....
|
||||||
|
home.file.".thunderbird" = {
|
||||||
|
force = true;
|
||||||
|
source = config.lib.file.mkOutOfStoreSymlink "${persistentDir}/thunderbird";
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -7,6 +7,13 @@
|
|||||||
lib = pkgs.lib;
|
lib = pkgs.lib;
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
|
affine = (pkgs.affine.overrideAttrs {
|
||||||
|
patches = [
|
||||||
|
"../overlays/patches/affin-edgeless-right-click-drag.patch"
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
runc = pkgs.runc.overrideAttrs ({
|
runc = pkgs.runc.overrideAttrs ({
|
||||||
src = /home/me/work/config/gitignore/runc;
|
src = /home/me/work/config/gitignore/runc;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
hyprpicker -r -z &
|
|
||||||
|
|
||||||
geometry=$(slurp -c '#ff0000ff')
|
|
||||||
|
|
||||||
if [[ "$?" != "0" ]]
|
|
||||||
then
|
|
||||||
pkill hyprpicker || true
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
grim -g "$geometry" -t ppm - | satty --filename - --copy-command=wl-copy --early-exit &
|
|
||||||
|
|
||||||
pkill hyprpicker || true
|
|
||||||
@@ -21,8 +21,11 @@
|
|||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
EDITOR = "nvim";
|
EDITOR = "nvim";
|
||||||
};
|
};
|
||||||
|
home.sessionPath = [
|
||||||
|
"/home/me/work/path-extra"
|
||||||
|
"${self}/mybin"
|
||||||
|
];
|
||||||
|
|
||||||
home.sessionPath = [ "${self}/mybin" ];
|
|
||||||
home.file = {
|
home.file = {
|
||||||
|
|
||||||
".subversion/config".text = ''
|
".subversion/config".text = ''
|
||||||
@@ -34,6 +37,8 @@
|
|||||||
} // (if hostname == "main" then { ".rclone.conf".source = config.lib.file.mkOutOfStoreSymlink "${secretsDir}/rclone-conf"; } else {});
|
} // (if hostname == "main" then { ".rclone.conf".source = config.lib.file.mkOutOfStoreSymlink "${secretsDir}/rclone-conf"; } else {});
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
|
unar
|
||||||
|
lm_sensors
|
||||||
borgbackup
|
borgbackup
|
||||||
rclone
|
rclone
|
||||||
archivemount
|
archivemount
|
||||||
@@ -41,7 +46,8 @@
|
|||||||
pkgs.hostname
|
pkgs.hostname
|
||||||
vim
|
vim
|
||||||
tree
|
tree
|
||||||
htop
|
lsof
|
||||||
|
htop-vim
|
||||||
subversion
|
subversion
|
||||||
pv
|
pv
|
||||||
nodejs
|
nodejs
|
||||||
@@ -62,7 +68,7 @@
|
|||||||
wakeonlan
|
wakeonlan
|
||||||
|
|
||||||
# python....
|
# python....
|
||||||
(python310.withPackages (p: with p; [
|
(python3.withPackages (p: with p; [
|
||||||
pandas
|
pandas
|
||||||
click
|
click
|
||||||
click-aliases
|
click-aliases
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
{ config, pkgs, self, workDir, inputs, persistentDir, system, ... }:
|
{ config, secretsDir, pkgs, self, workDir, inputs, persistentDir, system, pkgsUnstable, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -13,7 +13,29 @@
|
|||||||
../../programs/rofi/default.nix
|
../../programs/rofi/default.nix
|
||||||
../../programs/zathura.nix
|
../../programs/zathura.nix
|
||||||
../../programs/firefox/default.nix
|
../../programs/firefox/default.nix
|
||||||
|
../../programs/thunderbird.nix
|
||||||
inputs.lan-mouse.homeManagerModules.default
|
inputs.lan-mouse.homeManagerModules.default
|
||||||
|
|
||||||
|
"${inputs.vscode-server}/modules/vscode-server/home.nix"
|
||||||
|
|
||||||
|
inputs.walker.homeManagerModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.zed-editor = {
|
||||||
|
enable = true;
|
||||||
|
package = inputs.zed.packages.x86_64-linux.default;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.walker = {
|
||||||
|
enable = false;
|
||||||
|
runAsService = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
programs.vscode.enable = true;
|
||||||
|
programs.vscode.extensions = with pkgs.vscode-extensions; [
|
||||||
|
ms-vscode-remote.remote-ssh
|
||||||
|
ms-vscode-remote.remote-ssh-edit
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.lan-mouse.systemd = true;
|
programs.lan-mouse.systemd = true;
|
||||||
@@ -45,12 +67,15 @@
|
|||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
inherit system;
|
inherit system;
|
||||||
VIC_BINARY = "/home/me/work/victorinix/vic";
|
VIC_BINARY = "/home/me/work/victorinix/vic";
|
||||||
|
PPC_DATA_DIR = "/home/me/work/gitignore/ppc/data";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.dunst.enable = true;
|
services.dunst.enable = true;
|
||||||
|
|
||||||
|
|
||||||
home.file = {
|
home.file = {
|
||||||
|
".davfs2/secrets".source = config.lib.file.mkOutOfStoreSymlink "${secretsDir}/davfs2-secrets";
|
||||||
|
|
||||||
#".mozilla/firefox".source = config.lib.file.mkOutOfStoreSymlink "${persistentDir}/firefox";
|
#".mozilla/firefox".source = config.lib.file.mkOutOfStoreSymlink "${persistentDir}/firefox";
|
||||||
".cache/rofi-3.runcache".source = config.lib.file.mkOutOfStoreSymlink "${persistentDir}/rofi-run-cache";
|
".cache/rofi-3.runcache".source = config.lib.file.mkOutOfStoreSymlink "${persistentDir}/rofi-run-cache";
|
||||||
|
|
||||||
@@ -66,6 +91,7 @@
|
|||||||
# packages that i might not need everywhere??
|
# packages that i might not need everywhere??
|
||||||
#wstunnel
|
#wstunnel
|
||||||
rclone
|
rclone
|
||||||
|
pkgsUnstable.tsx
|
||||||
playerctl
|
playerctl
|
||||||
alsa-utils
|
alsa-utils
|
||||||
usbutils
|
usbutils
|
||||||
@@ -81,8 +107,9 @@
|
|||||||
|
|
||||||
|
|
||||||
# gui packages
|
# gui packages
|
||||||
|
songrec
|
||||||
obsidian
|
obsidian
|
||||||
gnome.eog
|
eog
|
||||||
xorg.xkbcomp
|
xorg.xkbcomp
|
||||||
haskellPackages.xmonad-extras
|
haskellPackages.xmonad-extras
|
||||||
haskellPackages.xmonad-contrib
|
haskellPackages.xmonad-contrib
|
||||||
@@ -92,7 +119,7 @@
|
|||||||
spotify
|
spotify
|
||||||
networkmanagerapplet
|
networkmanagerapplet
|
||||||
haskellPackages.xmobar
|
haskellPackages.xmobar
|
||||||
dolphin
|
kdePackages.dolphin
|
||||||
mupdf
|
mupdf
|
||||||
xclip
|
xclip
|
||||||
stalonetray
|
stalonetray
|
||||||
@@ -102,7 +129,7 @@
|
|||||||
|
|
||||||
# use signal from unstable, because the app itself says it would to update to be usable
|
# use signal from unstable, because the app itself says it would to update to be usable
|
||||||
self.inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.signal-desktop
|
self.inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.signal-desktop
|
||||||
self.inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.ticktick
|
#self.inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.ticktick
|
||||||
element-desktop
|
element-desktop
|
||||||
discord
|
discord
|
||||||
wireshark
|
wireshark
|
||||||
@@ -111,7 +138,7 @@
|
|||||||
xorg.xmodmap
|
xorg.xmodmap
|
||||||
inkscape
|
inkscape
|
||||||
kazam
|
kazam
|
||||||
onlyoffice-bin
|
onlyoffice-desktopeditors
|
||||||
|
|
||||||
# my own packages
|
# my own packages
|
||||||
supabase-cli
|
supabase-cli
|
||||||
@@ -136,12 +163,14 @@
|
|||||||
libvirt
|
libvirt
|
||||||
virt-manager
|
virt-manager
|
||||||
freerdp
|
freerdp
|
||||||
|
nixd
|
||||||
#(pkgs.writeShellApplication {
|
#(pkgs.writeShellApplication {
|
||||||
#name = "log";
|
#name = "log";
|
||||||
#runtimeInputs = [ inputs.my-log.packages.${system}.pythonForLog ];
|
#runtimeInputs = [ inputs.my-log.packages.${system}.pythonForLog ];
|
||||||
#text = "cd /home/me/work/log/new; nix develop -c 'python ${workDir}/log/new/client.py'";
|
#text = "cd /home/me/work/log/new; nix develop -c 'python ${workDir}/log/new/client.py'";
|
||||||
#text = ''${inputs.my-log.packages.${system}.pythonForLog}/bin/python ${workDir}/log/new/client.py "$@"'';
|
#text = ''${inputs.my-log.packages.${system}.pythonForLog}/bin/python ${workDir}/log/new/client.py "$@"'';
|
||||||
#})
|
#})
|
||||||
|
|
||||||
(pkgs.writeShellApplication {
|
(pkgs.writeShellApplication {
|
||||||
name = "rpi";
|
name = "rpi";
|
||||||
text = let
|
text = let
|
||||||
@@ -287,5 +316,3 @@
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user