Big update:

- WIP: Installer configuration to be used for portable or new systems.
- Add defaultApps (zen for links, codium for plain text).
- Refactor Ollama (AI) to skip model selection, WIP "codewriter" model.
- Password-manager: Switch to wayland package for rofi-rbw, increase lock timeout.
- Add mangohud config that shows FPS, frame time, throttling status in a horizontal layout below OW's HUD.
- Add nixGL config to use mesa and vulkan.
- Refactor configuration.nix as a "hub" file that just imports other files.
- amdgpu: Remove problematic amdvlk driver. Was causing misbehavior in Overwatch.
- gaming: Add gamescope and gamemode.
This commit is contained in:
Joey Hafner 2024-12-12 00:00:08 -08:00
parent e8b0f33686
commit d002643347
No known key found for this signature in database
37 changed files with 428 additions and 284 deletions

View File

@ -62,6 +62,29 @@
};
in {
nixosConfigurations = {
installer = lib.nixosSystem {
modules = [
./nixos/installer/configuration.nix
inputs.nix-flatpak.nixosModules.nix-flatpak
inputs.home-manager.nixosModules.home-manager
{
home-manager = {
users.joey = import ./home-manager/installer/home.nix;
sharedModules = [
inputs.nix-flatpak.homeManagerModules.nix-flatpak
inputs.stylix.homeManagerModules.stylix
];
extraSpecialArgs = { inherit pkgs pkgs-unstable inputs; inherit vars; };
};
}
"${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-base.nix"
];
inherit system;
specialArgs = {
inherit pkgs pkgs-unstable inputs;
inherit vars;
};
};
desktop = lib.nixosSystem {
modules = [
./nixos/desktop/configuration.nix

View File

@ -2,27 +2,31 @@
home.packages = with pkgs; [
ollama-rocm
( writeShellApplication {
name = "ollama-quick-chat"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
name = "ollama-chat";
runtimeInputs = [
libnotify
];
text = ''
#!/bin/bash
MODEL=''$''\{1:-""}
if [ -z "''$''\{MODEL}" ]; then
echo "No model selected. Choose a model from the list below:"
unset modellist
while read -r model; do
modellist+=( "$model" )
done< <(${pkgs.ollama-rocm}/bin/ollama list | tail -n+2)
select model in "''$''\{modellist[@]}"; do
MODEL=$(echo "$model" | tr -s ' ' | cut -d' ' -f1)
echo "Selected: $MODEL"
export MODEL
break
done
fi
# shellcheck disable=SC2034
DEFAULT_MODEL="llama3.2:3b"
MODEL=''$''\{1:-DEFAULT_MODEL}
# if [ -z "''$''\{MODEL}" ]; then
# echo "No model selected. Choose a model from the list below:"
# unset modellist
# while read -r model; do
# modellist+=( "$model" )
# done< <(${pkgs.ollama-rocm}/bin/ollama list | tail -n+2)
# select model in "''$''\{modellist[@]}"; do
# MODEL=$(echo "$model" | tr -s ' ' | cut -d' ' -f1)
# echo "Selected: $MODEL"
# export MODEL
# break
# done
# fi
echo "Loading model $MODEL"
${pkgs.ollama-rocm}/bin/ollama run "$MODEL" ""
@ -37,11 +41,12 @@
];
xdg.desktopEntries.ollama = {
exec = "kitty-popup ollama-quick-chat";
exec = "kitty-popup ollama-wrapped";
icon = "/home/${vars.user.username}/.icons/custom/ollama.png";
name = "AI Chat";
categories = [ "Utility" ];
type = "Application";
actions = {};
};
home.file."ollama.png" = {
@ -52,11 +57,33 @@
};
};
home.file."assistant.Modelfile" = {
target = ".ollama/assistant.Modelfile";
home.file."codewriter.Modelfile" = {
target = ".ollama/codewriter.Modelfile";
text = ''
FROM llama3.2
SYSTEM You are an assistant specialized in providing concise answers to prompts. Your answers should never be longer than 300 words. If the user asks a question with a complex answer, use references to outside resources such as specialized wikis to direct the user toward the answer to their question.
FROM llama3.3:70b
PARAMETER temperature 1
SYSTEM """
I want you to act as a senior full-stack tech leader and top-tier brilliant software developer, you embody technical excellence and a deep understanding of a wide range of technologies.
Your expertise covers not just coding, but also algorithm design, system architecture, and technology strategy.
For every question there is no need to explain, only give the solution.
Coding Mastery: Possess exceptional skills in programming languages including Python, JavaScript, SQL, NoSQL, mySQL, C++, C, Rust, Groovy, Go, and Java.
Your proficiency goes beyond mere syntax; you explore and master the nuances and complexities of each language, crafting code that is both highly efficient and robust.
Your capability to optimize performance and manage complex codebases sets the benchmark in software development.
Python | JavaScript | C++ | C | RUST | Groovy | Go | Java | SQL | MySQL | NoSQL
Efficient, Optimal, Good Performance, Excellent Complexity, Robust Code
Cutting-Edge Technologies: Adept at leveraging the latest technologies, frameworks, and tools to drive innovation and efficiency.
Experienced with Docker, Kubernetes, React, Angular, AWS, Supabase, Firebase, Azure, and Google Cloud.
Your understanding of these platforms enables you to architect and deploy scalable, resilient applications that meet modern business demands.
Docker | Kubernetes | React | Angular | AWS | Supabase | Firebase | Azure | Google Cloud Seamlessly Integrating Modern Tech Stacks Complex Algorithms & Data Structures Optimized Solutions for Enhanced Performance & Scalability
Solution Architect: Your comprehensive grasp of the software development lifecycle empowers you to design solutions that are not only technically sound but also align perfectly with business goals. From concept to deployment, you ensure adherence to industry best practices and agile methodologies, making the development process both agile and effective.
Interactive Solutions: When crafting user-facing features, employ modern ES6 JavaScript, TypeScript, and native browser APIs to manage interactivity seamlessly, enabling a dynamic and engaging user experience. Your focus lies in delivering functional, ready-to-deploy code, ensuring that explanations are succinct and directly aligned with the required solutions.
Never explain the code just write code.
"""
'';
};

View File

@ -1,7 +1,7 @@
{ vars, pkgs, ... }:
{
home.packages = with pkgs; [
rofi-rbw
rofi-rbw-wayland
wl-clipboard
dotool
];
@ -11,6 +11,10 @@
};
programs.rofi = {
enable = false;
configPath = "$XDG_CONFIG_HOME/rofi/config.rasi";
extraConfig = {};
location = "center";
terminal = "${pkgs.kitty}/bin/kitty";
};
programs.wofi = {
enable = true;
@ -21,14 +25,14 @@
settings = {
base_url = "https://bitwarden.jafner.tools";
email = "jafner425@gmail.com";
lock_timeout = 604800;
lock_timeout = 2592000;
pinentry = pkgs.pinentry-qt;
};
};
xdg.desktopEntries = {
rofi-rbw = {
exec = "${pkgs.rofi-rbw}/bin/rofi-rbw";
exec = "${pkgs.rofi-rbw-wayland}/bin/rofi-rbw";
icon = "/home/${vars.user.username}/.icons/custom/bitwarden.png";
name = "Bitwarden";
categories = [ "Utility" "Security" ];
@ -40,12 +44,12 @@
target = ".config/rofi-rbw.rc";
text = ''
action="type"
typing-key-delay=5
no-folder
typing-key-delay=0
selector-args="-W 40% -H 30%"
selector="wofi"
clipboarder="wl-copy"
typer="dotool"
keybindings="Enter:type:username:enter:tab:type:password:enter:copy:totp"
'';
};

View File

@ -0,0 +1,13 @@
{ ... }: {
xdg.mimeApps = {
enable = true;
defaultApplications = {
"text/plain" = "codium.desktop";
"text/html" = "zen.desktop";
"x-scheme-handler/http" = "zen.desktop";
"x-scheme-handler/https" = "zen.desktop";
"x-scheme-handler/about" = "zen.desktop";
"x-scheme-handler/unknown" = "zen.desktop";
};
};
}

View File

@ -0,0 +1,44 @@
{ lib, ... }: {
programs.mangohud = {
enable = true;
settings = {
# Metrics
cpu_stats = 0;
gpu_stats = 0;
frame_timing = 0;
vram = 0;
fps = 1;
fps_color_change = 1;
fps_value = "59,239";
frametime = 1;
# Env info
vulkan_driver = 1;
gamemode = 1;
present_mode = 0;
throttling_status = 1;
# Graphs
graphs = "";
# Appearance & presentation
legacy_layout = 1;
hud_no_margin = 1;
font_size = lib.mkForce 14;
no_small_font = 1;
position = "top-left";
offset_x = 3;
offset_y = 24;
width = 0;
height = 0;
table_columns = 0;
horizontal = 1;
horizontal_stretch = 0;
hud_compact = 1;
toggle_hud = "Shift_R+F12";
background_alpha = lib.mkForce 0.5;
alpha = lib.mkForce 1.0;
};
};
}
# OW HUD background: #1d253a
# OW HUD text: #b2bedc
# cat ~/.config/MangoHud/MangoHud.conf

View File

@ -0,0 +1,7 @@
{ ... }: {
nixGL = {
vulkan.enable = true;
defaultWrapper = "mesa";
installScripts = [ "mesa" ];
};
}

View File

@ -1,6 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs.rocmPackages; [
rocm-smi
rocminfo
];
}

View File

@ -1,6 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
gamepad-tool
linuxKernel.packages.linux_6_11.xpadneo
];
}

View File

@ -1,4 +0,0 @@
{ ... }: {
services.flatpak.packages = [ "xyz.z3ntu.razergenie/x86_64/stable" ];
}

View File

@ -4,6 +4,8 @@
./configuration/stylix.nix
./configuration/git.nix
./configuration/keys.nix
./configuration/defaultApps.nix
./configuration/mangohud.nix
./apps/browser.nix
./apps/discord.nix
./apps/obs-studio.nix
@ -19,14 +21,11 @@
./apps/email.nix
./apps/emulators.nix
./apps/ai.nix
./hardware/goxlr.nix
./hardware/razer.nix
./hardware/game-controller.nix
./hardware/amdgpu.nix
./services/flatpak.nix
./services/kdeconnect.nix
./services/nextcloud.nix
./services/protonmail.nix
./services/goxlr-utility.nix
./scripts/ffmpeg.nix
./scripts/kitty-popup.nix
];

View File

@ -1,5 +1,7 @@
{ pkgs, ... }: {
home.packages = [ pkgs.goxlr-utility ];
home.packages = with pkgs; [
goxlr-utility
];
systemd.user.services = {
goxlr-utility = {
Unit = {

View File

@ -1,8 +0,0 @@
{ pkgs, ... }: {
environment.systemPackages = with pkgs; [
steam
steam-run
lutris-unwrapped
protonup-ng
];
}

View File

@ -1,14 +0,0 @@
{ ... }: {
services.goxlr-utility.enable = true;
hardware.wooting.enable = true;
hardware.xpadneo.enable = true;
hardware.openrazer = {
enable = true;
users = [ "joey" ];
batteryNotifier = {
enable = true;
frequency = 600;
percentage = 40;
};
};
}

View File

@ -1,12 +0,0 @@
{ pkgs, ... }: {
services.displayManager.defaultSession = "plasma";
services.desktopManager.plasma6.enable = true;
programs.kdeconnect.enable = true;
environment.systemPackages = with pkgs.kdePackages; [ kcalc ];
environment.plasma6.excludePackages = with pkgs.kdePackages; [
elisa
kate
okular
discover
];
}

View File

@ -1,162 +1,26 @@
{ pkgs, ... }:
{
{ ... }: {
imports = [
./hardware-configuration.nix
./addons/peripherals.nix
./addons/samba-client.nix
./addons/plasma6.nix
./addons/gaming.nix
./addons/fonts.nix
./addons/ollama.nix
./hardware/amdgpu.nix
./hardware/audio.nix
./hardware/boot.nix
./hardware/filesystems.nix
./hardware/networking.nix
./hardware/peripherals.nix
./hardware/samba-client.nix
./services/flatpak.nix
./services/ollama.nix
./services/printing.nix
./services/ssh.nix
./sysconfig/desktop-environment.nix
./sysconfig/fonts.nix
./sysconfig/gaming.nix
./sysconfig/localization.nix
./sysconfig/nixos.nix
./sysconfig/user.nix
./sysconfig/ydotool.nix
];
home-manager.backupFileExtension = "backup";
# Configure user
programs.zsh.enable = true;
users.users.joey = {
isNormalUser = true;
shell = pkgs.zsh;
description = "joey";
extraGroups = [ "networkmanager" "wheel" ];
openssh.authorizedKeys.keys = let
authorizedKeys = pkgs.fetchurl {
url = "https://github.com/Jafner.keys";
sha256 = "1i3Vs6mPPl965g3sRmbXGzx6zQBs5geBCgNx2zfpjF4=";
};
in pkgs.lib.splitString "\n" (builtins.readFile authorizedKeys);
};
services.flatpak = {
enable = true;
uninstallUnmanaged = true;
remotes = [ { name = "flathub"; location = "https://flathub.org/repo/flathub.flatpakrepo"; } ];
};
time.timeZone = "America/Los_Angeles";
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable passwordless sudo
security.sudo = {
enable = true;
extraRules = [{
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ];
}
];
groups = [ "wheel" ];
}];
};
# Enable SSH server with exclusively key-based auth
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
};
# Configure system packages
environment.systemPackages = with pkgs; [
git
networkmanagerapplet
];
# Configure mouse and touchpad
services.libinput = {
enable = true;
mouse.naturalScrolling = true;
touchpad.naturalScrolling = true;
};
# Enable flakes
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Configure bootloader
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Configure networking
networking.hostName = "joey-desktop-nixos";
networking.networkmanager.enable = true;
# Disable systemd's getty and autovt on tty1
systemd.services = {
"getty@tty1".enable = false;
"autovt@tty1".enable = false;
};
# Enable printing service
services.printing.enable = true;
# Configure audio
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# Configure XDG
xdg.portal.enable = true;
xdg.portal.wlr.enable = true;
xdg.portal.extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
nixpkgs.config.allowUnfree = true;
programs.steam.enable = true;
programs.nix-ld = {
enable = true;
};
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = [];
};
hardware.amdgpu = {
amdvlk.enable = true;
opencl.enable = true;
};
# Configure displayManager
services.displayManager = {
enable = true;
autoLogin.enable = true;
autoLogin.user = "joey";
sddm = {
enable = true;
autoNumlock = true;
};
};
# Configure X11 server
services.xserver = {
enable = true;
excludePackages = [ pkgs.xterm ];
xkb = {
layout = "us";
variant = "";
};
};
# DO NOT CHANGE
system.stateVersion = "24.11";

View File

@ -1,47 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/e29ec340-6231-4afe-91a8-aaa2da613282";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/CC5A-CDFE";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/mnt/fedora" =
{ device = "/dev/disk/by-uuid/15454185-1268-4559-a074-bb154dc20a93";
fsType = "btrfs";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/73e8e737-1c5c-4ead-80c6-e616be538145"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0f0.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0f1.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,16 @@
{ pkgs, ... }: {
hardware = {
amdgpu.amdvlk.enable = false;
graphics = {
enable = true;
enable32Bit = true;
};
};
environment.systemPackages = with pkgs; [
rocmPackages.rocm-smi
rocmPackages.rocminfo
];
environment.variables = {
AMD_VULKAN_ICD = "RADV";
};
}

View File

@ -0,0 +1,12 @@
{ ... }: {
# Configure audio
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
}

View File

@ -0,0 +1,18 @@
{ pkgs, ... }: {
hardware.enableRedistributableFirmware = true;
hardware.cpu.amd.updateMicrocode = true;
boot = {
#kernelPackages = pkgs.linuxKernel.kernels.linux_xanmod_latest
kernelPackages = pkgs.linuxPackages_6_11;
initrd = {
availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" ];
kernelModules = [ ];
};
kernelModules = [ "amdgpu" "kvm-amd" ];
extraModulePackages = [ ];
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
}

View File

@ -0,0 +1,19 @@
{ ... }: {
fileSystems."/" = {
device = "/dev/disk/by-uuid/e29ec340-6231-4afe-91a8-aaa2da613282";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/CC5A-CDFE";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/mnt/fedora" = {
device = "/dev/disk/by-uuid/15454185-1268-4559-a074-bb154dc20a93";
fsType = "btrfs";
};
swapDevices = [ { device = "/dev/disk/by-uuid/73e8e737-1c5c-4ead-80c6-e616be538145"; } ];
}

View File

@ -0,0 +1,11 @@
{ pkgs, lib, ... }: {
networking = {
hostName = "joey-desktop-nixos";
networkmanager.enable = true;
useDHCP = lib.mkDefault true;
};
# Configure system packages
environment.systemPackages = with pkgs; [
networkmanagerapplet
];
}

View File

@ -0,0 +1,25 @@
{ pkgs, ... }: {
# Configure mouse and touchpad
services.libinput = {
enable = true;
mouse.naturalScrolling = true;
touchpad.naturalScrolling = true;
};
services.goxlr-utility.enable = true;
hardware.wooting.enable = true;
hardware.xpadneo.enable = true;
hardware.openrazer = {
enable = true;
users = [ "joey" ];
batteryNotifier = {
enable = true;
frequency = 600;
percentage = 40;
};
};
environment.systemPackages = with pkgs; [
razergenie
gamepad-tool
linuxKernel.packages.linux_6_11.xpadneo
];
}

View File

@ -0,0 +1,7 @@
{ ... }: {
services.flatpak = {
enable = true;
uninstallUnmanaged = true;
remotes = [ { name = "flathub"; location = "https://flathub.org/repo/flathub.flatpakrepo"; } ];
};
}

View File

@ -0,0 +1,4 @@
{ ... }: {
# Enable printing service
services.printing.enable = true;
}

View File

@ -0,0 +1,8 @@
{ ... }: {
# Enable SSH server with exclusively key-based auth
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
};
}

View File

@ -0,0 +1,60 @@
{ pkgs, ... }: {
programs.kdeconnect.enable = true;
environment.systemPackages = with pkgs; [ kdePackages.kcalc wl-color-picker ];
environment.plasma6.excludePackages = with pkgs.kdePackages; [
elisa
kate
okular
discover
];
# Disable systemd's getty and autovt on tty1
systemd.services = {
"getty@tty1".enable = false;
"autovt@tty1".enable = false;
};
# Configure displayManager
services.displayManager = {
enable = true;
defaultSession = "plasma";
autoLogin.enable = true;
autoLogin.user = "joey";
sddm = {
enable = true;
autoNumlock = true;
wayland.enable = true;
wayland.compositor = "kwin";
};
};
# Configure desktopManager
services.desktopManager = {
plasma6.enable = true;
};
# Configure X11 server
services.xserver = {
enable = true;
videoDrivers = [ "amdgpu" ];
excludePackages = [ pkgs.xterm ];
xkb = {
layout = "us";
variant = "";
};
};
# Configure xwayland
programs.xwayland = {
enable = true;
};
# Configure XDG
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
};
}

View File

@ -0,0 +1,22 @@
{ pkgs, ... }: {
environment.systemPackages = with pkgs; [
steam
steam-run
lutris-unwrapped
protonup-ng
vulkan-tools
mangohud
];
programs.steam = {
enable = true;
extraPackages = with pkgs; [];
};
programs.gamescope = {
enable = true;
capSysNice = false;
};
programs.gamemode = {
enable = true;
enableRenice = true;
};
}

View File

@ -0,0 +1,15 @@
{ ... }: {
time.timeZone = "America/Los_Angeles";
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
}

View File

@ -0,0 +1,10 @@
{ pkgs, lib, ... }: {
nixpkgs.config.allowUnfree = true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
programs.nix-ld = {
enable = true;
libraries = with pkgs; [ ];
};
nix.settings.experimental-features = [ "nix-command" "flakes" ];
home-manager.backupFileExtension = "backup";
}

View File

@ -0,0 +1,30 @@
{ pkgs, ... }: {
# Enable passwordless sudo
security.sudo = {
enable = true;
extraRules = [{
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ];
}
];
groups = [ "wheel" ];
}];
};
# Configure user
programs.zsh.enable = true;
users.users.joey = {
isNormalUser = true;
shell = pkgs.zsh;
description = "joey";
extraGroups = [ "networkmanager" "wheel" ];
openssh.authorizedKeys.keys = let
authorizedKeys = pkgs.fetchurl {
url = "https://github.com/Jafner.keys";
sha256 = "1i3Vs6mPPl965g3sRmbXGzx6zQBs5geBCgNx2zfpjF4=";
};
in pkgs.lib.splitString "\n" (builtins.readFile authorizedKeys);
};
}

View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMbzncsWNWxoDSqeva/ZoGHv32A0ggUMWfzx2Gz6Kmkk joey.desktop@jafner.net