diff --git a/flake.nix b/flake.nix index 4a5e6d8..292b6e1 100644 --- a/flake.nix +++ b/flake.nix @@ -37,6 +37,7 @@ nixpkgs.lib.nixosSystem { system = arch; modules = [ + ./nixosModules ./hosts/${host} ./hosts/base ]; diff --git a/homeManagerModules/default.nix b/homeManagerModules/default.nix new file mode 100644 index 0000000..dba5fa8 --- /dev/null +++ b/homeManagerModules/default.nix @@ -0,0 +1,16 @@ +{ ... }: +{ + imports = [ + ./desktop + ./programs + ./packages + ]; + config = { + home.username = "krop"; + home.homeDirectory = "/home/krop"; + home.stateVersion = "24.05"; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + }; +} diff --git a/users/krop/nyan_cat.jpg b/homeManagerModules/desktop/assets/nyan_cat.jpg similarity index 100% rename from users/krop/nyan_cat.jpg rename to homeManagerModules/desktop/assets/nyan_cat.jpg diff --git a/homeManagerModules/desktop/default.nix b/homeManagerModules/desktop/default.nix new file mode 100644 index 0000000..8b73239 --- /dev/null +++ b/homeManagerModules/desktop/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ + ./gnome.nix + ]; +} diff --git a/homeManagerModules/desktop/gnome.nix b/homeManagerModules/desktop/gnome.nix new file mode 100644 index 0000000..7064b36 --- /dev/null +++ b/homeManagerModules/desktop/gnome.nix @@ -0,0 +1,133 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.desktop.gnome; +in +{ + options.krop.hm.desktop.gnome = { + enable = lib.mkOption { + type = lib.types.bool; + default = false; + example = true; + description = "Enable my gnome configuration"; + }; + }; + config = lib.mkIf cfg.enable { + home.pointerCursor = { + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + gtk.enable = true; + x11.enable = true; + size = 24; + }; + + home.packages = with pkgs; [ + gnomeExtensions.grand-theft-focus + gnomeExtensions.vitals + gnomeExtensions.appindicator + gnome-commander + ]; + dconf = { + settings = { + "org/gnome/shell" = { + disable-user-extensions = false; + enabled-extensions = with pkgs.gnomeExtensions; [ + grand-theft-focus.extensionUuid + vitals.extensionUuid + appindicator.extensionUuid + ]; + favorite-apps = [ + "firefox.desktop" + "Alacritty.desktop" + "thunderbird.desktop" + "org.gnome.gnome-commander.desktop" + ]; + }; + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + accent-color = "red"; + show-battery-percentage = true; + gtk-enable-primary-paste = false; + }; + "org/gnome/mutter" = { + dynamic-workspaces = true; + edge-tiling = true; + workspaces-only-on-primary = true; + }; + "org/gnome/desktop/peripherals/touchpad" = { + natural-scroll = false; + click-method = "areas"; + }; + "org/gnome/desktop/wm/preferences" = { + button-layout = "appmenu:minimize,maximize,close"; + resize-with-right-button = true; + }; + "org/gnome/desktop/sound" = { + event-sounds = false; + }; + "org/gnome/desktop/search-providers" = { + disabled = [ + "org.gnome.Contacts.desktop" + "org.gnome.Calculator.desktop" + "org.gnome.Calendar.desktop" + "org.gnome.Characters.desktop" + "org.gnome.clocks.desktop" + "org.gnome.Software.desktop" + ]; + }; + "org/gnome/shell/extensions/vitals" = { + position-in-panel = 0; + show-battery = true; + icon-style = 1; + hot-sensors = [ + "__temperature_max__" + "_memory_available_" + "_storage_free_" + ]; + }; + "org/gnome/desktop/background" = + let + bgPath = "file://${./assets/nyan_cat.jpg}"; + in + { + picture-options = "zoom"; + picture-uri = bgPath; + picture-uri-dark = bgPath; + }; + }; + }; + + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + qt = { + enable = true; + platformTheme.name = "Adwaita-dark"; + style = { + name = "Adwaita-dark"; + package = pkgs.adwaita-qt; + }; + }; + + xdg.portal = { + enable = true; + extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; + configPackages = with pkgs; [ xdg-desktop-portal-gtk ]; + }; + }; +} diff --git a/homeManagerModules/packages/default.nix b/homeManagerModules/packages/default.nix new file mode 100644 index 0000000..e2fff11 --- /dev/null +++ b/homeManagerModules/packages/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./octave.nix + ./development.nix + ./misc.nix + ]; +} diff --git a/homeManagerModules/packages/development.nix b/homeManagerModules/packages/development.nix new file mode 100644 index 0000000..c22c2d9 --- /dev/null +++ b/homeManagerModules/packages/development.nix @@ -0,0 +1,30 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.packages.development; +in +{ + options.krop.hm.packages.development = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my development configuration"; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + gh + d2 + iperf + ]; + programs.go = { + enable = true; + goPath = "Repositories/go"; + }; + }; +} diff --git a/homeManagerModules/packages/misc.nix b/homeManagerModules/packages/misc.nix new file mode 100644 index 0000000..cb3f1d3 --- /dev/null +++ b/homeManagerModules/packages/misc.nix @@ -0,0 +1,31 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.packages.misc; +in +{ + options.krop.hm.packages.misc = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my misc applications"; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + spotify + moonlight-qt + jetbrains-mono + mattermost-desktop + gparted + prismlauncher # REMOVE AND MOVE TO games module after refactoring + joplin-desktop + wireshark + ]; + }; +} diff --git a/homeManagerModules/packages/octave.nix b/homeManagerModules/packages/octave.nix new file mode 100644 index 0000000..cc8f0e8 --- /dev/null +++ b/homeManagerModules/packages/octave.nix @@ -0,0 +1,29 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.packages.octave; +in +{ + options.krop.hm.packages.octave = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my octave configuration"; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + ghostscript + (octaveFull.withPackages ( + ps: with ps; [ + octavePackages.signal + ] + )) + ]; + }; +} diff --git a/homeManagerModules/programs/alacritty.nix b/homeManagerModules/programs/alacritty.nix new file mode 100644 index 0000000..a0b371a --- /dev/null +++ b/homeManagerModules/programs/alacritty.nix @@ -0,0 +1,33 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.programs.alacritty; +in +{ + options.krop.hm.programs.alacritty = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my alacritty configuration"; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ alacritty-theme ]; + programs.alacritty = { + enable = true; + settings = { + general = { + import = [ "${pkgs.alacritty-theme}/gnome_terminal.toml" ]; + }; + font = { + size = 16; + }; + }; + }; + }; +} diff --git a/homeManagerModules/programs/codium.nix b/homeManagerModules/programs/codium.nix new file mode 100644 index 0000000..156116e --- /dev/null +++ b/homeManagerModules/programs/codium.nix @@ -0,0 +1,42 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.programs.codium; +in +{ + options.krop.hm.programs.codium = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my codium configuration"; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + gopls + nixd + ]; + programs.vscode = { + enable = true; + package = pkgs.vscodium; + extensions = with pkgs.vscode-extensions; [ + jnoortheen.nix-ide + tamasfe.even-better-toml + vscodevim.vim + ms-azuretools.vscode-docker + ms-kubernetes-tools.vscode-kubernetes-tools + redhat.vscode-yaml + ms-python.python + ms-python.debugpy + ms-python.vscode-pylance + golang.go + ]; + mutableExtensionsDir = false; + }; + }; +} diff --git a/homeManagerModules/programs/default.nix b/homeManagerModules/programs/default.nix new file mode 100644 index 0000000..bff353f --- /dev/null +++ b/homeManagerModules/programs/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + imports = [ + ./alacritty.nix + ./codium.nix + ./direnv.nix + ./git.nix + ./micro.nix + ./tmux.nix + ./zoxide.nix + ./zsh.nix + ]; +} diff --git a/homeManagerModules/programs/direnv.nix b/homeManagerModules/programs/direnv.nix new file mode 100644 index 0000000..4162dc1 --- /dev/null +++ b/homeManagerModules/programs/direnv.nix @@ -0,0 +1,36 @@ +{ + lib, + config, + ... +}: +let + cfg = config.krop.hm.programs.direnv; +in +{ + options.krop.hm.programs.direnv = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my direnv configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + stdlib = '' + : ''${XDG_CACHE_HOME:=$HOME/.cache} + declare -A direnv_layout_dirs + direnv_layout_dir() { + echo "''${direnv_layout_dirs[$PWD]:=$( + echo -n "$XDG_CACHE_HOME"/direnv/layouts/ + echo -n "$PWD" | sha1sum | cut -d ' ' -f 1 + )}" + } + ''; + }; + + }; +} diff --git a/homeManagerModules/programs/git.nix b/homeManagerModules/programs/git.nix new file mode 100644 index 0000000..933a89f --- /dev/null +++ b/homeManagerModules/programs/git.nix @@ -0,0 +1,70 @@ +{ + lib, + config, + ... +}: +let + cfg = config.krop.hm.programs.git; +in +{ + options.krop.hm.programs.git = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my git configuration"; + }; + work-config = lib.mkOption { + type = lib.types.bool; + default = false; + example = true; + description = "Generate my job configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.git = { + enable = true; + userName = "Jakub Kropáček"; + userEmail = "kropikuba@gmail.com"; + includes = + if cfg.work-config then + let + workcfg = { + user = { + email = "jakub.kropacek@olc.cz"; + name = "Jakub Kropáček"; + }; + }; + in + [ + { + condition = "gitdir:~/Repositories/OLC/**"; + contents = workcfg; + } + { + condition = "gitdir:~/Repositories/OLC-Hexpol/**"; + contents = workcfg; + } + ] + else + [ ]; + extraConfig = { + init = { + defaultBranch = "master"; + }; + push = { + autoSetupRemote = true; + }; + status = { + submoduleSummary = true; + }; + diff = { + submodule = "log"; + }; + core = { + autocrlf = "input"; + }; + }; + }; + }; +} diff --git a/homeManagerModules/programs/micro.nix b/homeManagerModules/programs/micro.nix new file mode 100644 index 0000000..352bfe1 --- /dev/null +++ b/homeManagerModules/programs/micro.nix @@ -0,0 +1,27 @@ +{ + lib, + config, + ... +}: +let + cfg = config.krop.hm.programs.micro; +in +{ + options.krop.hm.programs.micro = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my micro configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.micro = { + enable = true; + settings = { + colorscheme = "atom-dark"; + wordwrap = true; + }; + }; + }; +} diff --git a/homeManagerModules/programs/tmux.nix b/homeManagerModules/programs/tmux.nix new file mode 100644 index 0000000..6be4ad7 --- /dev/null +++ b/homeManagerModules/programs/tmux.nix @@ -0,0 +1,41 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.krop.hm.programs.tmux; +in +{ + options.krop.hm.programs.tmux = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my tmux configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.tmux = { + enable = true; + mouse = true; + terminal = "tmux-256color"; + plugins = with pkgs.tmuxPlugins; [ + yank + sensible + ]; + extraConfig = '' + # Move status bar to top + set -g status-position top + + # Indexing from 1 instead of 0 + set -g base-index 1 + set -g pane-base-index 1 + set-window-option -g pane-base-index 1 + set-option -g renumber-windows on + ''; + }; + + }; +} diff --git a/homeManagerModules/programs/zoxide.nix b/homeManagerModules/programs/zoxide.nix new file mode 100644 index 0000000..bfff547 --- /dev/null +++ b/homeManagerModules/programs/zoxide.nix @@ -0,0 +1,30 @@ +{ + lib, + config, + ... +}: +let + cfg = config.krop.hm.programs.zoxide; +in +{ + options.krop.hm.programs.zoxide = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my zoxide configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.fzf = { + enable = true; + }; + + programs.zoxide = { + enable = true; + options = [ + "--cmd cd" + ]; + }; + }; +} diff --git a/homeManagerModules/programs/zsh.nix b/homeManagerModules/programs/zsh.nix new file mode 100644 index 0000000..08a5c3c --- /dev/null +++ b/homeManagerModules/programs/zsh.nix @@ -0,0 +1,98 @@ +{ + lib, + config, + ... +}: +let + cfg = config.krop.hm.programs.zsh; +in +{ + options.krop.hm.programs.zsh = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = "Enable my zsh configuration"; + }; + }; + config = lib.mkIf cfg.enable { + programs.zsh = { + enable = true; + autocd = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + initExtra = '' + bindkey "^[[1;3D" backward-word + bindkey "^[[1;5D" backward-word + bindkey "^[[1;3C" forward-word + bindkey "^[[1;5C" forward-word + bindkey "^[[3~" delete-char + + autoload -Uz vcs_info + setopt auto_menu + setopt complete_in_word + setopt always_to_end + + # zstyle command format + # zstyle ::::::