diff --git a/flake.lock b/flake.lock index 6c00520..27ee762 100644 --- a/flake.lock +++ b/flake.lock @@ -254,6 +254,22 @@ "type": "github" } }, + "nixos-m1": { + "flake": false, + "locked": { + "lastModified": 1665528527, + "narHash": "sha256-BEnPCtrSB8F7AgvsK/QZuAIJizXMAh5eEEDBMZBFYGk=", + "owner": "tpwrules", + "repo": "nixos-m1", + "rev": "267f23b3b79614edaa87b05d5253fc78acfb054c", + "type": "github" + }, + "original": { + "owner": "tpwrules", + "repo": "nixos-m1", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1648219316, @@ -426,6 +442,7 @@ "kak-lsp": "kak-lsp", "kakoune": "kakoune", "nix-gaming": "nix-gaming", + "nixos-m1": "nixos-m1", "nixpkgs": "nixpkgs_3", "nixpkgs-unstable": "nixpkgs-unstable", "nur": "nur", diff --git a/flake.nix b/flake.nix index 3224809..b79cc60 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,8 @@ kakoune.flake = false; kak-lsp.url = github:kak-lsp/kak-lsp; kak-lsp.flake = false; + nixos-m1.url = github:tpwrules/nixos-m1; + nixos-m1.flake = false; # --- # DEPLOYMENT ONLY! secrets @@ -138,6 +140,24 @@ } ]; }; + # macbook nixos + nixosConfigurations."kagami-air-m1" = nixpkgs.lib.nixosSystem rec { + pkgs = pkgs' system; + system = "aarch64-linux"; + modules = [ + ./modules/my-tinc + sops-nix.nixosModules.sops + "${inputs.nixos-m1}/nix/m1-support" + ./kagami-air-m1/configuration.nix + nixpkgsAsRegistry + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.nki = import ./home/macbook-nixos.nix; + } + ]; + }; # DigitalOcean node nixosConfigurations."nki-personal-do" = nixpkgs.lib.nixosSystem rec { diff --git a/home/common-linux.nix b/home/common-linux.nix index 232800f..3e5872f 100644 --- a/home/common-linux.nix +++ b/home/common-linux.nix @@ -6,14 +6,18 @@ with lib; { ]; config = (mkIf (strings.hasSuffix "linux" pkgs.system) { home.packages = with pkgs; [ - vivaldi psmisc # killall and friends - mpv # for anki - pkgs.unstable.anki-bin - pinentry-gnome - ]; + ] ++ ( + if pkgs.system == "x86-64_linux" + then [ + vivaldi + mpv # for anki + pkgs.unstable.anki-bin + ] + else [] + ); ## Gnome-keyring services.gnome-keyring = { diff --git a/home/kakoune/kak.nix b/home/kakoune/kak.nix index ffeb5fe..a71d510 100644 --- a/home/kakoune/kak.nix +++ b/home/kakoune/kak.nix @@ -3,10 +3,32 @@ let kakounePkg = pkgs.kakoune.override { - kakoune = pkgs.kakoune-unwrapped.overrideAttrs (oldAttrs: { + kakoune = with lib; pkgs.unstable.gcc11Stdenv.mkDerivation rec { + pname = "kakoune-unwrapped"; version = "r${builtins.substring 0 6 pkgs.sources.kakoune.rev}"; src = pkgs.sources.kakoune; - }); + makeFlags = ["debug=no" "PREFIX=${placeholder "out"}"]; + + preConfigure = '' + export version="v${version}"; + ''; + + enableParallelBuilding = true; + + doInstallCheck = true; + installCheckPhase = '' + $out/bin/kak -ui json -e "kill 0" + ''; + + postInstall = '' + # make share/kak/autoload a directory + cd "$out/share/kak" + autoload_target=$(readlink autoload) + rm autoload + mkdir autoload + ln -s --relative "$autoload_target" autoload + ''; + }; }; kak-lsp = pkgs.libs.crane.buildPackage { diff --git a/home/macbook-nixos.nix b/home/macbook-nixos.nix new file mode 100644 index 0000000..8e969d1 --- /dev/null +++ b/home/macbook-nixos.nix @@ -0,0 +1,72 @@ +{ pkgs, config, lib, ... }: + +{ + imports = [ + # Common configuration + ./common.nix + # We use our own firefox + # ./firefox.nix + # osu! + # ./osu.nix + ]; + + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "nki"; + home.homeDirectory = "/home/nki"; + + # More packages + home.packages = (with pkgs; [ + # CLI stuff + python + zip + # TeX + texlive.combined.scheme-full + + # Java & sbt + openjdk11 + sbt + ]); + + # Graphical set up + # linux.graphical.type = "wayland"; + # linux.graphical.wallpaper = ./images/wallpaper_0.png; + # Enable sway + # programs.my-sway.enable = true; + # programs.my-sway.fontSize = 14.0; + # programs.my-sway.terminal = "${config.programs.kitty.package}/bin/kitty"; + # Keyboard support + # wayland.windowManager.sway.config = { + # input."1278:34:HHKB-Hybrid_3_Keyboard".xkb_layout = "jp"; + # input."1:1:AT_Translated_Set_2_keyboard" = { + # xkb_options = "ctrl:swapcaps"; + # xkb_layout = "us"; + # }; + # }; + # Kitty + nki.programs.kitty = { + enable = true; + fontSize = 16; + }; + + # Multiple screen setup + # services.kanshi = { + # enable = true; + # profiles.undocked.outputs = [{ criteria = "LVDS-1"; }]; + # profiles.docked-hdmi.outputs = [ + # { criteria = "LVDS-1"; status = "disable"; } + # { criteria = "HDMI-A-1"; } + # ]; + # }; + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "21.05"; +} + diff --git a/kagami-air-m1/configuration.nix b/kagami-air-m1/configuration.nix new file mode 100644 index 0000000..3b40b3d --- /dev/null +++ b/kagami-air-m1/configuration.nix @@ -0,0 +1,161 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + # Firmware extracted manually + ./m1-support/firmware + # Fonts + ../modules/personal/fonts + # Encrypted DNS + ../modules/services/edns + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = false; + + # boot.kernelBuildIsCross = true; + boot.kernelBuildIs16K = false; + + networking.hostName = "kagami-air-m1"; # Define your hostname. + + # networking.hostName = "nixos"; # 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. + + # Set your time zone. + time.timeZone = "Europe/Zurich"; + + # 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. + nix = { + package = pkgs.nixFlakes; + extraOptions = '' + experimental-features = nix-command flakes + ''; + }; + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + i18n.inputMethod.enabled = "ibus"; + i18n.inputMethod.ibus.engines = (with pkgs.ibus-engines; [ bamboo mozc libpinyin ]); + console = { + # font = "ter-v32n"; + keyMap = "jp106"; + # useXkbConfig = true; # use xkbOptions in tty. + }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + + + # Configure keymap in X11 + # services.xserver.layout = "jp106"; + # services.xserver.xkbOptions = { + # "eurosign:e"; + # "caps:escape" # map caps to escape. + # }; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + sound.enable = true; + hardware.pulseaudio.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.nki = { + isNormalUser = true; + extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + packages = with pkgs; [ + firefox + # kakoune + # thunderbird + ]; + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + kakoune # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + ]; + + # Environment variables + environment.variables = { + # Input method overrides + GTK_IM_MODULE = "ibus"; + QT_IM_MODULE = "ibus"; + "XMODIFIERS=@im" = "ibus"; + + # Basic editor setup + EDITOR = "kak"; + VISUAL = "kak"; + }; + + services.resolved.enable = true; + services.resolved.domains = [ "127.0.0.1" ]; + services.resolved.fallbackDns = [ "127.0.0.1" ]; + nki.services.edns.enable = true; + nki.services.edns.ipv6 = true; + services.flatpak.enable = true; + xdg.portal = { + enable = true; + wlr.enable = true; + }; + + ## Bluetooth + # + hardware.bluetooth.enable = true; + + # PAM + security.pam.services.lightdm.enableKwallet = true; + security.pam.services.lightdm.enableGnomeKeyring = true; + + # 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 value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "22.05"; # Did you read the comment? +} + diff --git a/kagami-air-m1/hardware-configuration.nix b/kagami-air-m1/hardware-configuration.nix new file mode 100644 index 0000000..c489f71 --- /dev/null +++ b/kagami-air-m1/hardware-configuration.nix @@ -0,0 +1,38 @@ +# 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 = [ "usb_storage" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/ebb6bf2e-2d7f-4fa6-88cb-751fdd174ef9"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/19BC-1BE8"; + fsType = "vfat"; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + + # nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; + powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; + # high-resolution display + hardware.video.hidpi.enable = lib.mkDefault true; +} diff --git a/kagami-air-m1/m1-support/firmware/default.nix b/kagami-air-m1/m1-support/firmware/default.nix new file mode 100644 index 0000000..d28c6d3 --- /dev/null +++ b/kagami-air-m1/m1-support/firmware/default.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ... }: +{ + hardware.firmware = [ + (pkgs.stdenvNoCC.mkDerivation { + name = "firmware"; + buildCommand = '' + mkdir -p $out/lib/firmware + FIRMWARE='${./firmware.tar}' + if [ -e "$FIRMWARE" ]; then + tar xf "$FIRMWARE" -C $out/lib/firmware + else + # stop nixos infra from breaking when it doesn't have any firmware + touch $out/lib/firmware/.dummy + fi + ''; + }) + ]; +} diff --git a/kagami-air-m1/m1-support/firmware/firmware.tar b/kagami-air-m1/m1-support/firmware/firmware.tar new file mode 100755 index 0000000..c271d82 Binary files /dev/null and b/kagami-air-m1/m1-support/firmware/firmware.tar differ