diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c75cd83 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +nextcloud/adminpass diff --git a/flake.nix b/flake.nix index 57fdf9f..0084a64 100644 --- a/flake.nix +++ b/flake.nix @@ -3,29 +3,29 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - nextcloud29 = { - url = "github:nix-unstable/nextcloud"; + home-manager = { + url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { self, nixpkgs, nextcloud29, ... }: + outputs = { self, nixpkgs, home-manager, ... }: let system = "x86_64-linux"; lib = nixpkgs.lib; pkgs = nixpkgs.legacyPackages.${system}; in { nixosConfigurations = { - nix = lib.nixosSystem { + cloud = lib.nixosSystem { inherit system; modules = [ ./nixos/configuration.nix ]; }; }; - nixosConfigurations = { - nix = lib.nixosSystem { - inherit system; - modules = [ ./nextcloud/nextcloud.nix ]; - }; + homeConfigurations = { + toph = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + modules = [ ./home-manager/home.nix ]; + }; }; }; } diff --git a/home-manager/cloud.png b/home-manager/cloud.png new file mode 100644 index 0000000..3ad02e2 Binary files /dev/null and b/home-manager/cloud.png differ diff --git a/home-manager/cloud.txt b/home-manager/cloud.txt new file mode 100644 index 0000000..040cb3d --- /dev/null +++ b/home-manager/cloud.txt @@ -0,0 +1,7 @@ +[?25l ▌▌▌▌▌▌  + ▌▌▌▌▌ ▌░▌ ▌▒▌ ▌▌▌▌▌  +▌░▌ ▌░▌░▌ ▌░▌░▌ ▌░▌ +▌░▌ ▌░▌░▌ ▌░▌░▌ ▌░▌ + ▌▌▌▌▌ ▌░▌ ▌░▌ ▌▌▌▌▌  + ▌▌▌▌▌▌  +[?25h \ No newline at end of file diff --git a/home-manager/fastfetch.nix b/home-manager/fastfetch.nix new file mode 100644 index 0000000..566ffa6 --- /dev/null +++ b/home-manager/fastfetch.nix @@ -0,0 +1,96 @@ +{ pkgs, ... }: +# progams./fastfetch = +{ + enable = true; + settings = { + logo = { + # Created with Chafa + # chafa -s 26x13 -w 9 --symbols vhalf --view-size 26x13 cloud.png > cloud.txt + source = '' + + + [?25l ▌▌▌▌▌▌  + ▌▌▌▌▌ ▌░▌ ▌▒▌ ▌▌▌▌▌  + ▌░▌ ▌░▌░▌ ▌░▌░▌ ▌░▌ + ▌░▌ ▌░▌░▌ ▌░▌░▌ ▌░▌ + ▌▌▌▌▌ ▌░▌ ▌░▌ ▌▌▌▌▌  + ▌▌▌▌▌▌  + [?25h + + +''; + type = "data"; + position = "left"; + padding = { + top = 0; + }; + }; + display = { + separator = " "; + }; + modules = [ + { + key = "╭───────────╮"; + type = "custom"; + } + { + key = "│ {#31} user {#keys}│"; + type = "title"; + format = "{user-name}"; + } + { + key = "│ {#32}󰇅 host {#keys}│"; + type = "title"; + format = "{host-name}"; + } + { + key = "│ {#33}󰅐 uptime {#keys}│"; + type = "uptime"; + } + { + key = "│ {#34}{icon} distro {#keys}│"; + type = "os"; + } + { + key = "│ {#36}󰇄 desktop {#keys}│"; + type = "de"; + } + { + key = "│ {#32} shell {#keys}│"; + type = "shell"; + } + { + key = "│ {#33}󰍛 cpu {#keys}│"; + type = "cpu"; + showPeCoreCount = true; + } + { + key = "│ {#34}󰉉 disk {#keys}│"; + type = "disk"; + folders = "/"; + } + { + key = "│ {#35} memory {#keys}│"; + type = "memory"; + } + { + key = "│ {#36}󰩟 network {#keys}│"; + type = "localip"; + format = "{ipv4} ({ifname})"; + } + { + key = "├───────────┤"; + type = "custom"; + } + { + key = "│ {#39} colors {#keys}│"; + type = "colors"; + symbol = "circle"; + } + { + key = "╰───────────╯"; + type = "custom"; + } + ]; + }; +} \ No newline at end of file diff --git a/home-manager/fish.nix b/home-manager/fish.nix new file mode 100644 index 0000000..2621e45 --- /dev/null +++ b/home-manager/fish.nix @@ -0,0 +1,204 @@ +{ pkgs, ... }: +# progams.fish = +{ + enable = true; + interactiveShellInit = '' + set -U __fish_initialized 3400 + set -U _tide_left_items pwd\x1egit\x1enewline\x1echaracter + set -U _tide_prompt_92037 \x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x40PWD\x40\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x20\x1e\x1b\x5b38\x3b5\x3b76m\u276f\x1e\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x20\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x5b38\x3b5\x3b180mtoph\x40nix\x1b\x5b38\x3b5\x3b246m\x20\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x5b38\x3b5\x3b66m11\x3a43\x3a49\x20PM\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm\x1b\x28B\x1b\x5bm + set -U _tide_right_items status\x1ecmd_duration\x1econtext\x1ejobs\x1enix_shell\x1etime + set -U fish_color_autosuggestion brblack + set -U fish_color_cancel \x2dr + set -U fish_color_command blue + set -U fish_color_comment red + set -U fish_color_cwd green + set -U fish_color_cwd_root red + set -U fish_color_end green + set -U fish_color_error brred + set -U fish_color_escape brcyan + set -U fish_color_history_current \x2d\x2dbold + set -U fish_color_host normal + set -U fish_color_host_remote yellow + set -U fish_color_normal normal + set -U fish_color_operator brcyan + set -U fish_color_param cyan + set -U fish_color_quote yellow + set -U fish_color_redirection cyan\x1e\x2d\x2dbold + set -U fish_color_search_match bryellow\x1e\x2d\x2dbackground\x3dbrblack + set -U fish_color_selection white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack + set -U fish_color_status red + set -U fish_color_user brgreen + set -U fish_color_valid_path \x2d\x2dunderline + set -U fish_key_bindings fish_default_key_bindings + set -U fish_pager_color_completion normal + set -U fish_pager_color_description yellow\x1e\x2di + set -U fish_pager_color_prefix normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline + set -U fish_pager_color_progress brwhite\x1e\x2d\x2dbackground\x3dcyan + set -U fish_pager_color_selected_background \x2dr + set -U tide_aws_bg_color normal + set -U tide_aws_color FF9900 + set -U tide_aws_icon \uf270 + set -U tide_character_color 5FD700 + set -U tide_character_color_failure FF0000 + set -U tide_character_icon \u276f + set -U tide_character_vi_icon_default \u276e + set -U tide_character_vi_icon_replace \u25b6 + set -U tide_character_vi_icon_visual V + set -U tide_cmd_duration_bg_color normal + set -U tide_cmd_duration_color 87875F + set -U tide_cmd_duration_decimals 0 + set -U tide_cmd_duration_icon \x1d + set -U tide_cmd_duration_threshold 3000 + set -U tide_context_always_display false + set -U tide_context_bg_color normal + set -U tide_context_color_default D7AF87 + set -U tide_context_color_root D7AF00 + set -U tide_context_color_ssh D7AF87 + set -U tide_context_hostname_parts 1 + set -U tide_crystal_bg_color normal + set -U tide_crystal_color FFFFFF + set -U tide_crystal_icon \ue62f + set -U tide_direnv_bg_color normal + set -U tide_direnv_bg_color_denied normal + set -U tide_direnv_color D7AF00 + set -U tide_direnv_color_denied FF0000 + set -U tide_direnv_icon \u25bc + set -U tide_distrobox_bg_color normal + set -U tide_distrobox_color FF00FF + set -U tide_distrobox_icon \U000f01a7 + set -U tide_docker_bg_color normal + set -U tide_docker_color 2496ED + set -U tide_docker_default_contexts default\x1ecolima + set -U tide_docker_icon \uf308 + set -U tide_elixir_bg_color normal + set -U tide_elixir_color 4E2A8E + set -U tide_elixir_icon \ue62d + set -U tide_gcloud_bg_color normal + set -U tide_gcloud_color 4285F4 + set -U tide_gcloud_icon \U000f02ad + set -U tide_git_bg_color normal + set -U tide_git_bg_color_unstable normal + set -U tide_git_bg_color_urgent normal + set -U tide_git_color_branch 5FD700 + set -U tide_git_color_conflicted FF0000 + set -U tide_git_color_dirty D7AF00 + set -U tide_git_color_operation FF0000 + set -U tide_git_color_staged D7AF00 + set -U tide_git_color_stash 5FD700 + set -U tide_git_color_untracked 00AFFF + set -U tide_git_color_upstream 5FD700 + set -U tide_git_icon \x1d + set -U tide_git_truncation_length 24 + set -U tide_git_truncation_strategy \x1d + set -U tide_go_bg_color normal + set -U tide_go_color 00ACD7 + set -U tide_go_icon \ue627 + set -U tide_java_bg_color normal + set -U tide_java_color ED8B00 + set -U tide_java_icon \ue256 + set -U tide_jobs_bg_color normal + set -U tide_jobs_color 5FAF00 + set -U tide_jobs_icon \uf013 + set -U tide_jobs_number_threshold 1000 + set -U tide_kubectl_bg_color normal + set -U tide_kubectl_color 326CE5 + set -U tide_kubectl_icon \U000f10fe + set -U tide_left_prompt_frame_enabled false + set -U tide_left_prompt_items pwd\x1egit\x1enewline\x1echaracter + set -U tide_left_prompt_prefix + set -U tide_left_prompt_separator_diff_color \x20 + set -U tide_left_prompt_separator_same_color \x20 + set -U tide_left_prompt_suffix \x20 + set -U tide_nix_shell_bg_color normal + set -U tide_nix_shell_color 7EBAE4 + set -U tide_nix_shell_icon \uf313 + set -U tide_node_bg_color normal + set -U tide_node_color 44883E + set -U tide_node_icon \ue24f + set -U tide_os_bg_color normal + set -U tide_os_color normal + set -U tide_os_icon \uf313 + set -U tide_php_bg_color normal + set -U tide_php_color 617CBE + set -U tide_php_icon \ue608 + set -U tide_private_mode_bg_color normal + set -U tide_private_mode_color FFFFFF + set -U tide_private_mode_icon \U000f05f9 + set -U tide_prompt_add_newline_before false + set -U tide_prompt_color_frame_and_connection 585858 + set -U tide_prompt_color_separator_same_color 949494 + set -U tide_prompt_icon_connection \u00b7 + set -U tide_prompt_min_cols 34 + set -U tide_prompt_pad_items false + set -U tide_prompt_transient_enabled true + set -U tide_pulumi_bg_color normal + set -U tide_pulumi_color F7BF2A + set -U tide_pulumi_icon \uf1b2 + set -U tide_pwd_bg_color normal + set -U tide_pwd_color_anchors 00AFFF + set -U tide_pwd_color_dirs 0087AF + set -U tide_pwd_color_truncated_dirs 8787AF + set -U tide_pwd_icon \x1d + set -U tide_pwd_icon_home \x1d + set -U tide_pwd_icon_unwritable \uf023 + set -U tide_pwd_markers \x2ebzr\x1e\x2ecitc\x1e\x2egit\x1e\x2ehg\x1e\x2enode\x2dversion\x1e\x2epython\x2dversion\x1e\x2eruby\x2dversion\x1e\x2eshorten_folder_marker\x1e\x2esvn\x1e\x2eterraform\x1eCargo\x2etoml\x1ecomposer\x2ejson\x1eCVS\x1ego\x2emod\x1epackage\x2ejson\x1ebuild\x2ezig + set -U tide_python_bg_color normal + set -U tide_python_color 00AFAF + set -U tide_python_icon \U000f0320 + set -U tide_right_prompt_frame_enabled false + set -U tide_right_prompt_items status\x1ecmd_duration\x1econtext\x1ejobs\x1edirenv\x1enode\x1epython\x1erustc\x1ejava\x1ephp\x1epulumi\x1eruby\x1ego\x1egcloud\x1ekubectl\x1edistrobox\x1etoolbox\x1eterraform\x1eaws\x1enix_shell\x1ecrystal\x1eelixir\x1ezig\x1etime + set -U tide_right_prompt_prefix \x20 + set -U tide_right_prompt_separator_diff_color \x20 + set -U tide_right_prompt_separator_same_color \x20 + set -U tide_right_prompt_suffix + set -U tide_ruby_bg_color normal + set -U tide_ruby_color B31209 + set -U tide_ruby_icon \ue23e + set -U tide_rustc_bg_color normal + set -U tide_rustc_color F74C00 + set -U tide_rustc_icon \ue7a8 + set -U tide_shlvl_bg_color normal + set -U tide_shlvl_color d78700 + set -U tide_shlvl_icon \uf120 + set -U tide_shlvl_threshold 1 + set -U tide_status_bg_color normal + set -U tide_status_bg_color_failure normal + set -U tide_status_color 5FAF00 + set -U tide_status_color_failure D70000 + set -U tide_status_icon \u2714 + set -U tide_status_icon_failure \u2718 + set -U tide_terraform_bg_color normal + set -U tide_terraform_color 844FBA + set -U tide_terraform_icon \U000f1062 + set -U tide_time_bg_color normal + set -U tide_time_color 5F8787 + set -U tide_time_format \x25r + set -U tide_toolbox_bg_color normal + set -U tide_toolbox_color 613583 + set -U tide_toolbox_icon \ue24f + set -U tide_vi_mode_bg_color_default normal + set -U tide_vi_mode_bg_color_insert normal + set -U tide_vi_mode_bg_color_replace normal + set -U tide_vi_mode_bg_color_visual normal + set -U tide_vi_mode_color_default 949494 + set -U tide_vi_mode_color_insert 87AFAF + set -U tide_vi_mode_color_replace 87AF87 + set -U tide_vi_mode_color_visual FF8700 + set -U tide_vi_mode_icon_default D + set -U tide_vi_mode_icon_insert I + set -U tide_vi_mode_icon_replace R + set -U tide_vi_mode_icon_visual V + set -U tide_zig_bg_color normal + set -U tide_zig_color F7A41D + set -U tide_zig_icon \ue6a9 + + set fish_greeting # Disable greeting + + fastfetch + ''; + plugins = [ + # Enable a plugin (here grc for colorized command output) from nixpkgs + { name = "grc"; src = pkgs.fishPlugins.grc.src; } + { name = "tide"; src = pkgs.fishPlugins.tide.src; } + ]; +} diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..0142908 --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,36 @@ +{ pkgs, ... }: + +{ + home.username = "toph"; + home.homeDirectory = "/home/toph"; + home.stateVersion = "24.05"; + + # Packages + home.packages = with pkgs; [ + fastfetch + fish + fishPlugins.grc + fishPlugins.tide + grc + ]; + + home.file = { + # ".config" = { + # recursive = true; + # source = ../.config; + # }; + }; + + home.sessionVariables = { + EDITOR = "micro"; + VISUAL = "micro"; + XDG_CONFIG_HOME = "$HOME/.config"; + }; + + # Programs and Services + programs.fish = import ./fish.nix { inherit pkgs; }; + programs.fastfetch = import ./fastfetch.nix { inherit pkgs; }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/nextcloud/nextcloud.nix b/nextcloud/nextcloud.nix index d40dedc..cc30bcb 100644 --- a/nextcloud/nextcloud.nix +++ b/nextcloud/nextcloud.nix @@ -1,64 +1,42 @@ -{ self, config, lib, pkgs, ... }: +{ config, pkgs, ... }: { - services = { - nginx.virtualHosts = { - "cloud.ryot.foo" = { - forceSSL = true; - enableACME = true; - }; + enable = true; + hostName = "cloud.ryot.foo"; - "office.ryot.foo" = { - forceSSL = true; - enableACME = true; - }; - }; + # Need to manually increment with every major upgrade. + package = pkgs.nextcloud29; - nextcloud = { - enable = true; - hostName = "cloud.ryot.foo"; + # Let NixOS install and configure the database automatically. + database.createLocally = true; - # Need to manually increment with every major upgrade. - package = pkgs.nextcloud27; + # Let NixOS install and configure Redis caching automatically. + configureRedis = true; - # Let NixOS install and configure the database automatically. - database.createLocally = true; + # Increase the maximum file upload size to avoid problems uploading videos. + maxUploadSize = "16G"; + https = true; - # Let NixOS install and configure Redis caching automatically. - configureRedis = true; + autoUpdateApps.enable = true; + extraAppsEnable = true; + extraApps = with config.services.nextcloud.package.packages.apps; { + # https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/nextcloud/packages/nextcloud-apps.json + inherit calendar contacts mail notes tasks; + # inherit calendar contacts mail notes onlyoffice tasks; - # Increase the maximum file upload size to avoid problems uploading videos. - maxUploadSize = "16G"; - https = true; - enableBrokenCiphersForSSE = false; - - autoUpdateApps.enable = true; - extraAppsEnable = true; - extraApps = with config.services.nextcloud.package.packages.apps; { - # List of apps we want to install and are already packaged in - # https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/nextcloud/packages/nextcloud-apps.json - inherit calendar contacts mail notes onlyoffice tasks; - - # Custom app installation example. - cookbook = pkgs.fetchNextcloudApp rec { - url = - "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz"; - sha256 = "sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M="; - }; - }; - - config = { - overwriteProtocol = "https"; - defaultPhoneRegion = "PT"; - dbtype = "pgsql"; - adminuser = "admin"; - adminpassFile = "/path/to/nextcloud-admin-pass"; - }; - }; - - onlyoffice = { - enable = true; - hostname = "onlyoffice.example.com"; - }; + # Custom app installation example. + # cookbook = pkgs.fetchNextcloudApp rec { + # url = + # "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz"; + # sha256 = "sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M="; + # }; }; -} + + config = { + overwriteprotocol = "https"; + default_phone_region = "US"; + dbtype = "pgsql"; + adminuser = "admin"; + adminpassFile = "./adminpass"; + }; +} \ No newline at end of file diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8682ef5..63855c1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,6 +1,7 @@ { modulesPath, config, pkgs, ... }: let hostname = "cloud"; + user = "toph"; password = "[REDACTED]"; timeZone = "America/New_York"; defaultLocale = "en_US.UTF-8"; @@ -44,14 +45,28 @@ in { # USERS users = { mutableUsers = false; - users.root = { + users."${user}" = { + isNormalUser = true; password = password; + extraGroups = [ "wheel" ]; + shell = pkgs.fish; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIClZstYoT64zHnGfE7LMYNiQPN5/gmCt382lC+Ji8lrH PVE" ]; }; }; + # Enable passwordless sudo. + security.sudo.extraRules= [ + { users = [ user ]; + commands = [ + { command = "ALL" ; + options= [ "NOPASSWD" ]; + } + ]; + } + ]; + # SYSTEM PACKAGES environment.systemPackages = with pkgs; [ git @@ -64,6 +79,11 @@ in { # PROGRAMS & SERVICES programs.ssh.startAgent = true; + services.nextcloud = import ../nextcloud/nextcloud.nix { inherit pkgs config; }; + + # Shells + environment.shells = with pkgs; [ bash fish ]; + programs.fish.enable = true; # OpenSSH service configuration. services.openssh = { @@ -72,7 +92,7 @@ in { AllowUsers = null; # everyone PasswordAuthentication = false; KbdInteractiveAuthentication = false; - PermitRootLogin = "yes"; + PermitRootLogin = "no"; }; };