From 2d2d6010a878dfbcf3ca283183c7d5f6774a179d Mon Sep 17 00:00:00 2001 From: TudbuT Date: Sat, 7 Sep 2024 01:18:31 +0200 Subject: [PATCH] initial commit --- .gitignore | 1 + bright.script.nix | 13 ++++ configuration.nix | 182 +++++++++++++++++++++++++++++++++++++++++++ home.nix | 95 ++++++++++++++++++++++ nix-cmd.script.nix | 12 +++ sl.script.nix | 26 +++++++ sshpc.script.nix | 11 +++ startsync.script.nix | 14 ++++ 8 files changed, 354 insertions(+) create mode 100644 .gitignore create mode 100644 bright.script.nix create mode 100644 configuration.nix create mode 100644 home.nix create mode 100644 nix-cmd.script.nix create mode 100644 sl.script.nix create mode 100644 sshpc.script.nix create mode 100644 startsync.script.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..577b0a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +hardware-configuration.nix diff --git a/bright.script.nix b/bright.script.nix new file mode 100644 index 0000000..6ba4222 --- /dev/null +++ b/bright.script.nix @@ -0,0 +1,13 @@ +with import {}; + +pkgs.writeShellScriptBin "bright" '' + #!/bin/sh + f="/sys/class/backlight/*/brightness" + if [ "$1" = up ] ; then + echo $(($(cat $f) + 50)) | sudo tee $f + fi + if [ "$1" = down ] ; then + echo $(($(cat $f) - 50)) | sudo tee $f + fi +'' + diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..1e8d477 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,182 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ./home.nix + ]; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + helix + wget + alacritty + links2 + fish + killall + bat + dconf + twemoji-color-font + fira-code + htop + rustup + clang + nodejs + git + pavucontrol + zip unzip + modemmanager + modem-manager-gui + fastfetch + asciinema + zulu8 + ffmpeg + imagemagick + (import ./sl.script.nix) + (import ./startsync.script.nix) + (import ./bright.script.nix) + (import ./nix-cmd.script.nix) + (import ./sshpc.script.nix) + ]; + programs.fish.enable = true; + + # Use the GRUB 2 boot loader. + boot.loader.grub.enable = true; + # boot.loader.grub.efiSupport = true; + # boot.loader.grub.efiInstallAsRemovable = true; + # boot.loader.efi.efiSysMountPoint = "/boot/efi"; + # Define on which hard drive you want to install Grub. + # hardware # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only + + # hardware config # networking.hostName = "TudbuT-NixX250"; # Define your hostname. + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + hardware.bluetooth.enable = true; + services.blueman.enable = true; + #services.modemmanager.enable = true; + systemd.services.modem-manager.enable = true; + systemd.services.earlyoom.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Select internationalisation properties. + # i18n.defaultLocale = "en_US.UTF-8"; + #console = { + # font = "Lat2-Terminus16"; + # keyMap = "de"; + # useXkbConfig = true; # use xkb.options in tty. + #; + + systemd.services.set_battery_threshold = { + enable = true; + script = '' + echo 90 | tee /sys/class/power_supply/BAT*/charge_control_end_threshold > /dev/null + ''; + wantedBy = ["multi-user.target"]; + serviceConfig = { + user = "root"; + Type = "oneshot"; + }; + }; + + services.fprintd.enable = true; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.windowManager.i3.enable = true; + services.xserver.windowManager.i3.extraPackages = with pkgs; [ + dmenu + i3status + i3lock + libnotify + xss-lock + maim + xclip + clipit + ]; + services.logind.lidSwitch = "ignore"; + + # Configure keymap in X11 + services.xserver.xkb.layout = "de"; + # services.xserver.xkb.options = "eurosign:e,caps:escape"; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + hardware.pulseaudio.enable = true; + # OR + # services.pipewire = { + # enable = true; + # pulse.enable = true; + # }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.tudbut = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" ]; # Enable ‘sudo’ for the user. + }; + users.defaultUserShell = pkgs.fish; + security.sudo.wheelNeedsPassword = false; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + networking.firewall.enable = false; + + # Copy the NixOS configuration file and link it from the resulting system + # (/run/current-system/configuration.nix). This is useful in case you + # accidentally delete configuration.nix. + system.copySystemConfiguration = true; + + # This option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "24.05"; # Did you read the comment? + +} + diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..2442a27 --- /dev/null +++ b/home.nix @@ -0,0 +1,95 @@ + +{ lib, config, pkgs, ... }: +let + home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz"; +in +{ + imports = [ + (import "${home-manager}/nixos") + ]; + + users.users.tudbut.packages = with pkgs; [ + nheko + firefox + thunderbird + tree + keepassxc + sshfs + arc-theme + signal-desktop + gimp + graphviz + mkchromecast + yt-dlp + giac-with-xcas + sqlite-interactive + mpv + acpi + nix-init + (import /home/tudbut/gitshit/spl {}) + (import /home/tudbut/gitshit/revpfw3 {}) + ]; + + nixpkgs.config.permittedInsecurePackages = [ + "olm-3.2.16" + "python3.12-youtube-dl-2021.12.17" + ]; + + home-manager.backupFileExtension = ".hm-old"; + home-manager.users.tudbut = { + programs.home-manager.enable = true; + + /* The home.stateVersion option does not have a default and must be set */ + home.stateVersion = "24.05"; + programs.fish.enable = true; + programs.fish.shellInit = '' + export PATH="$PATH:$HOME/.cargo/bin" + export SPL_PATH="$HOME/gitshit/spl" + export ISBPL_PATH="$HOME/gitshit/isbpl" + ''; + programs.alacritty.enable = true; + /* Here goes the rest of your home-manager config, e.g. home.packages = [ pkgs.foo ]; */ + xsession.enable = true; + xsession.initExtra = "clipit &"; + xsession.windowManager.i3 = { + enable = true; + package = pkgs.i3-gaps; + config = { + keybindings = lib.mkOptionDefault { + "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle"; + "XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle"; + "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%"; + "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%"; + "XF86MonBrightnessUp" = "exec --no-startup-id bright up"; + "XF86MonBrightnessDown" = "exec --no-startup-id bright down"; + "Print" = "exec --no-startup-id maim -s screenshot.png && xclip -selection clipboard -target image/png screenshot.png"; + "Mod4+q" = "exec sl"; + }; + terminal = "alacritty"; + modifier = "Mod4"; + fonts.names = ["Fira Code" "DejaVu Sans Mono"]; + fonts.size = 12.0; + bars = [{ + statusCommand = "${pkgs.i3status}/bin/i3status"; + fonts = { + names = [ "Fira Code" "DejaVu Sans Mono" ]; + size = 12.0; + }; + }]; + defaultWorkspace = "1"; + gaps = { + inner = 12; + }; + }; + }; + programs.i3status.enable = true; + programs.i3status.modules."battery all".settings.format = "%status %percentage %remaining %emptytime %consumption"; + programs.i3status.modules."battery all".settings.last_full_capacity = true; + services.dunst.enable = true; + gtk.enable = true; + gtk.theme = { + name = "Arc-Dark"; + package = pkgs.arc-theme; + }; + }; +} diff --git a/nix-cmd.script.nix b/nix-cmd.script.nix new file mode 100644 index 0000000..2d53b43 --- /dev/null +++ b/nix-cmd.script.nix @@ -0,0 +1,12 @@ +with import {}; + +pkgs.writeShellScriptBin "nix-cmd" '' + #!/bin/sh + pkg="''${@:1:1}" + rest="''${@:2}" + if [ "$rest" = "" ] ; then + rest="$pkg" + fi + exec nix-shell -p $pkg --run "$(echo "$rest" | sed -E "s/^_ /$pkg /")" +'' + diff --git a/sl.script.nix b/sl.script.nix new file mode 100644 index 0000000..e202550 --- /dev/null +++ b/sl.script.nix @@ -0,0 +1,26 @@ +with import {}; + +pkgs.writeShellScriptBin "sl" '' + #!/bin/sh + killall xss-lock i3lock + sleep 0.1 + xss-lock --transfer-sleep-lock -- i3lock --nofork & + PID=$! + + lastdate="$(date +%s)" + ok=0 + sudo systemctl suspend + + + + while kill -0 $PID ; do + if [ "$(($(date +%s) - $lastdate))" > 5 ] && [ "$ok" = 0 ] ; then + sudo systemctl restart fprintd + ok=1 + sleep 2 + fi + fprintd-verify && kill $PID + sleep 2 + done +'' + diff --git a/sshpc.script.nix b/sshpc.script.nix new file mode 100644 index 0000000..a9a0f53 --- /dev/null +++ b/sshpc.script.nix @@ -0,0 +1,11 @@ +with import {}; + +pkgs.writeShellScriptBin "sshpc" '' + #!/bin/sh + + ssh -p 23 root@tudbut.de etherwake 00:19:99:d2:9e:27 + sleep 10 + ssh -tp 23 root@tudbut.de ssh -t tudbut@192.168.178.144 + ssh -p 23 root@tudbut.de ssh tudbut@192.168.178.144 sudo systemctl suspend +'' + diff --git a/startsync.script.nix b/startsync.script.nix new file mode 100644 index 0000000..df0afbd --- /dev/null +++ b/startsync.script.nix @@ -0,0 +1,14 @@ +with import {}; + +pkgs.writeShellScriptBin "startsync" '' + #!/bin/sh + killall sshfs sftp + sleep 0.5 + killall -9 sshfs sftp + sudo umount -l sync + sleep 0.5 + sshfs -p 23 root@tudbut.de:sync ~/sync + while ! ls ~/sync/Passwords.kdbx ; do sleep 0.2 ; done + exec keepassxc +'' +