diff --git a/flake.lock b/flake.lock index f65ab48..5becf8e 100644 --- a/flake.lock +++ b/flake.lock @@ -976,6 +976,29 @@ "type": "github" } }, + "nix-formatter-pack": { + "inputs": { + "nixpkgs": [ + "nix-on-droid", + "nixpkgs" + ], + "nmd": "nmd", + "nmt": "nmt" + }, + "locked": { + "lastModified": 1705252799, + "narHash": "sha256-HgSTREh7VoXjGgNDwKQUYcYo13rPkltW7IitHrTPA5c=", + "owner": "Gerschtli", + "repo": "nix-formatter-pack", + "rev": "2de39dedd79aab14c01b9e2934842051a160ffa5", + "type": "github" + }, + "original": { + "owner": "Gerschtli", + "repo": "nix-formatter-pack", + "type": "github" + } + }, "nix-index-database": { "inputs": { "nixpkgs": [ @@ -996,6 +1019,34 @@ "type": "github" } }, + "nix-on-droid": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nix-formatter-pack": "nix-formatter-pack", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-docs": "nixpkgs-docs", + "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap", + "nmd": "nmd_2" + }, + "locked": { + "lastModified": 1720396533, + "narHash": "sha256-UFzk/hZWO1VkciIO5UPaSpJN8s765wsngUSvtJM6d5Q=", + "owner": "nix-community", + "repo": "nix-on-droid", + "rev": "f3d3b8294039f2f9a8fb7ea82c320f29c6b0fe25", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-24.05", + "repo": "nix-on-droid", + "type": "github" + } + }, "nixcord": { "inputs": { "flake-parts": "flake-parts_3", @@ -1052,6 +1103,38 @@ "type": "github" } }, + "nixpkgs-docs": { + "locked": { + "lastModified": 1705957679, + "narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9a333eaa80901efe01df07eade2c16d183761fa3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-for-bootstrap": { + "locked": { + "lastModified": 1720244366, + "narHash": "sha256-WrDV0FPMVd2Sq9hkR5LNHudS3OSMmUrs90JUTN+MXpA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", + "type": "github" + } + }, "nixpkgs-lib": { "locked": { "lastModified": 1782614948, @@ -1319,6 +1402,60 @@ "type": "github" } }, + "nmd": { + "flake": false, + "locked": { + "lastModified": 1666190571, + "narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=", + "owner": "rycee", + "repo": "nmd", + "rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169", + "type": "gitlab" + }, + "original": { + "owner": "rycee", + "repo": "nmd", + "type": "gitlab" + } + }, + "nmd_2": { + "inputs": { + "nixpkgs": [ + "nix-on-droid", + "nixpkgs-docs" + ], + "scss-reset": "scss-reset" + }, + "locked": { + "lastModified": 1705050560, + "narHash": "sha256-x3zzcdvhJpodsmdjqB4t5mkVW22V3wqHLOun0KRBzUI=", + "owner": "~rycee", + "repo": "nmd", + "rev": "66d9334933119c36f91a78d565c152a4fdc8d3d3", + "type": "sourcehut" + }, + "original": { + "owner": "~rycee", + "repo": "nmd", + "type": "sourcehut" + } + }, + "nmt": { + "flake": false, + "locked": { + "lastModified": 1648075362, + "narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=", + "owner": "rycee", + "repo": "nmt", + "rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae", + "type": "gitlab" + }, + "original": { + "owner": "rycee", + "repo": "nmt", + "type": "gitlab" + } + }, "nur": { "inputs": { "flake-parts": "flake-parts_4", @@ -1399,6 +1536,7 @@ "lanzaboote": "lanzaboote", "mango": "mango", "nix-index-database": "nix-index-database", + "nix-on-droid": "nix-on-droid", "nixcord": "nixcord", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_11", @@ -1536,6 +1674,22 @@ "type": "github" } }, + "scss-reset": { + "flake": false, + "locked": { + "lastModified": 1631450058, + "narHash": "sha256-muDlZJPtXDIGevSEWkicPP0HQ6VtucbkMNygpGlBEUM=", + "owner": "andreymatin", + "repo": "scss-reset", + "rev": "0cf50e27a4e95e9bb5b1715eedf9c54dee1a5a91", + "type": "github" + }, + "original": { + "owner": "andreymatin", + "repo": "scss-reset", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": "nixpkgs_13" diff --git a/flake.nix b/flake.nix index fa8ddab..f3d1cf4 100644 --- a/flake.nix +++ b/flake.nix @@ -59,6 +59,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + nix-on-droid = { + url = "github:nix-community/nix-on-droid/release-24.05"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + import-tree.url = "github:vic/import-tree"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11-small"; diff --git a/modules/droid/core/hm.nix b/modules/droid/core/hm.nix new file mode 100644 index 0000000..cb6531c --- /dev/null +++ b/modules/droid/core/hm.nix @@ -0,0 +1,32 @@ +{ inputs, config, ... }: +{ + flake.modules.droid.core = + { + hostName, + userName, + userEmail, + ... + }: + { + home-manager = { + backupFileExtension = "bak"; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { + inherit + inputs + hostName + userName + userEmail + ; + }; + + config = { + imports = [ + config.flake.modules.homeManager.shell + config.flake.modules.homeManager.${hostName} + ]; + }; + }; + }; +} diff --git a/modules/droid/core/nix.nix b/modules/droid/core/nix.nix new file mode 100644 index 0000000..e210021 --- /dev/null +++ b/modules/droid/core/nix.nix @@ -0,0 +1,7 @@ +{ + flake.modules.droid.core = { + nix.extraOptions = '' + experimental-features = nix-command flakes + ''; + }; +} diff --git a/modules/droid/networking/ssh.nix b/modules/droid/networking/ssh.nix new file mode 100644 index 0000000..57722fe --- /dev/null +++ b/modules/droid/networking/ssh.nix @@ -0,0 +1,109 @@ +{ + flake.modules.droid.networking = + { + config, + lib, + pkgs, + ... + }: + let + # utility functions + concatLines = list: builtins.concatStringsSep "\n" list; + + prefixLines = mapper: list: concatLines (map mapper list); + + # could be put in the config + configPath = "ssh/sshd_config"; + + keysFolder = "/etc/ssh"; + + authorizedKeysFolder = "/etc/ssh/authorized_keys.d"; + + supportedKeysTypes = [ + "rsa" + "ed25519" + ]; + + sshd-start-bin = "sshd-start"; + + # real config + cfg = config.tnix.networking.openssh; + + pathOfKeyOf = type: "${keysFolder}/ssh_host_${type}_key"; + + generateKeyOf = type: '' + ${lib.getExe' pkgs.openssh "ssh-keygen"} \ + -t "${type}" \ + -f "${pathOfKeyOf type}" \ + -N "" + ''; + + generateKeyWhenNeededOf = type: '' + if [ ! -f ${pathOfKeyOf type} ]; then + mkdir --parents ${keysFolder} + ${generateKeyOf type} + fi + ''; + + sshd-start = pkgs.writeScriptBin sshd-start-bin '' + #!${pkgs.runtimeShell} + ${prefixLines generateKeyWhenNeededOf supportedKeysTypes} + + mkdir --parents "${authorizedKeysFolder}" + echo "${lib.concatStringsSep "\n" cfg.authorizedKeys}" > ${authorizedKeysFolder}/${config.user.userName} + + echo "Starting sshd in non-daemonized way on port ${lib.concatMapStrings toString cfg.ports}" + ${lib.getExe' pkgs.openssh "sshd"} \ + -f "/etc/${configPath}" \ + -D # don't detach into a daemon process + ''; + in + { + options.tnix.networking.openssh = { + enable = lib.mkEnableOption '' + Whether to enable the OpenSSH secure shell daemon, which + allows secure remote logins. + ''; + + ports = lib.mkOption { + type = lib.types.listOf lib.types.port; + default = [ 22 ]; + description = '' + Specifies on which ports the SSH daemon listens. + ''; + }; + + authorizedKeys = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = '' + Specify a list of public keys to be added to the authorized_keys file. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + environment.etc = { + "${configPath}".text = '' + ${prefixLines (port: "Port ${toString port}") cfg.ports} + + AuthorizedKeysFile ${authorizedKeysFolder}/%u + + LogLevel VERBOSE + ''; + }; + + environment.packages = [ + sshd-start + pkgs.openssh + ]; + + build.activationAfter.sshd = '' + SERVER_PID=$(${lib.getExe' pkgs.procps "ps"} -a | ${lib.getExe' pkgs.toybox "grep"} sshd || true) + if [ -z "$SERVER_PID" ]; then + $DRY_RUN_CMD ${lib.getExe sshd-start} + fi + ''; + }; + }; +} diff --git a/modules/hosts/vega/config.nix b/modules/hosts/vega/config.nix new file mode 100644 index 0000000..8547718 --- /dev/null +++ b/modules/hosts/vega/config.nix @@ -0,0 +1,48 @@ +{ + flake.modules.droid.vega = + { + pkgs, + userEmail, + ... + }: + { + # @TODO: Broken currently + # android-integration.am.enable = true; + # android-integration.termux-open-url.enable = true; + # android-integration.xdg-open.enable = true; + # android-integration.termux-setup-storage.enable = true; + # android-integration.termux-reload-settings.enable = true; + + terminal.font = + let + firacode = pkgs.nerd-fonts.fira-code; + fontPath = "share/fonts/truetype/NerdFonts/FiraCode/FiraCodeNerdFont-Regular.ttf"; + in + "${firacode}/${fontPath}"; + + time.timeZone = "Asia/Kolkata"; + + tnix.networking.openssh = { + enable = true; + ports = [ 8033 ]; + authorizedKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${userEmail}" + ]; + }; + + user = { + uid = 10481; + gid = 10481; + shell = "${pkgs.zsh}/bin/zsh"; + }; + + environment.etcBackupExtension = ".backup"; + environment.motd = ""; + environment.packages = with pkgs; [ + openssh + rsync + ]; + + system.stateVersion = "24.05"; + }; +} diff --git a/modules/hosts/vega/default.nix b/modules/hosts/vega/default.nix new file mode 100644 index 0000000..5a5626c --- /dev/null +++ b/modules/hosts/vega/default.nix @@ -0,0 +1,41 @@ +{ + inputs, + outputs, + config, + ... +}: +let + hostName = "vega"; + userName = "nix-on-droid"; + userEmail = "t@tux.rs"; + system = "aarch64-linux"; + unstable = true; + nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable; +in +{ + flake.nixOnDroidConfigurations."${hostName}" = inputs.nix-on-droid.lib.nixOnDroidConfiguration { + pkgs = import nixpkgs { + system = system; + config = { + allowUnfree = true; + joypixels.acceptLicense = true; + }; + overlays = builtins.attrValues inputs.self.overlays; + }; + extraSpecialArgs = { + inherit + inputs + outputs + hostName + userName + userEmail + ; + }; + + modules = [ + config.flake.modules.droid.core + config.flake.modules.droid.networking + config.flake.modules.droid.${hostName} + ]; + }; +} diff --git a/modules/hosts/vega/home.nix b/modules/hosts/vega/home.nix new file mode 100644 index 0000000..8d219c1 --- /dev/null +++ b/modules/hosts/vega/home.nix @@ -0,0 +1,9 @@ +{ lib, ... }: +{ + flake.modules.homeManager.vega = { + # @TODO: Broken currently - By default it's enabled by neovim module + programs.vim.enable = lib.mkForce false; + + home.stateVersion = "26.05"; + }; +}