diff --git a/users/functionalhacker/dconf.nix b/users/functionalhacker/dconf.nix new file mode 100644 index 00000000..370697c9 --- /dev/null +++ b/users/functionalhacker/dconf.nix @@ -0,0 +1,92 @@ +{ lib, ... }: + +with lib.hm.gvariant; + +{ + dconf.settings = { + "io/github/celluloid-player/celluloid" = { + dark-theme-enable = false; + mpv-config-enable = true; + mpv-config-file = "file:///home/functionalhacker/.config/mpv/mpv.conf"; + mpv-input-config-enable = true; + mpv-input-config-file = "file:///home/functionalhacker/.config/mpv/input.conf"; + settings-migrated = true; + }; + + "org/gnome/Connections" = { + first-run = false; + }; + + "org/gnome/desktop/a11y/mouse" = { + dwell-click-enabled = false; + dwell-threshold = 10; + dwell-time = 1.2; + secondary-click-enabled = true; + secondary-click-time = 1.2; + }; + + "org/gnome/desktop/calendar" = { + show-weekdate = true; + }; + + "org/gnome/desktop/input-sources" = { + show-all-sources = true; + sources = [ (mkTuple [ "xkb" "eu" ]) (mkTuple [ "xkb" "fi" ]) ]; + xkb-options = [ "lv3:ralt_switch" ]; + }; + + "org/gnome/desktop/peripherals/touchpad" = { + tap-to-click = true; + two-finger-scrolling-enabled = true; + }; + + "org/gnome/desktop/privacy" = { + disable-microphone = false; + old-files-age = mkUint32 14; + recent-files-max-age = -1; + remove-old-temp-files = true; + remove-old-trash-files = true; + }; + + "org/gnome/desktop/wm/keybindings" = { + close = [ "w" ]; + move-to-workspace-down = [ "j" ]; + move-to-workspace-left = [ "h" ]; + move-to-workspace-right = [ "l" ]; + move-to-workspace-up = [ "k" ]; + switch-to-workspace-down = [ "j" ]; + switch-to-workspace-left = [ "h" ]; + switch-to-workspace-right = [ "l" ]; + switch-to-workspace-up = [ "k" ]; + toggle-fullscreen = [ ]; + toggle-maximized = [ "f" ]; + }; + + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" ]; + screensaver = [ "BackSpace" ]; + volume-step = 1; + www = [ "b" ]; + }; + + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { + binding = "Return"; + command = "kgx"; + name = "Open terminal"; + }; + + "org/gnome/file-roller/dialogs/new" = { + default-extension = ".tar.zst"; + }; + + "org/gnome/system/location" = { + enabled = true; + }; + + "org/gnome/tweaks" = { + show-extensions-notice = false; + }; + + }; + +} diff --git a/users/functionalhacker/fzf.nix b/users/functionalhacker/fzf.nix new file mode 100644 index 00000000..2aa65f24 --- /dev/null +++ b/users/functionalhacker/fzf.nix @@ -0,0 +1,15 @@ +{ ... }: + +{ + programs.fzf = { + enable = true; + enableZshIntegration = true; + defaultCommand = "fd -Hlt f"; + defaultOptions = [ "-m --ansi --bind ctrl-a:toggle-all,ctrl-d:deselect-all,ctrl-t:toggle-all" ]; + fileWidgetCommand = "fd -Hlt f --strip-cwd-prefix"; + fileWidgetOptions = [ "--preview 'bat --color=always --style=numbers --line-range=:500 {}" ]; + changeDirWidgetCommand = "fd -Hlt d"; + changeDirWidgetOptions = [ "--preview 'eza -l {}'" ]; + }; + +} diff --git a/users/functionalhacker/home.nix b/users/functionalhacker/home.nix index 33d94724..8ba7ee40 100644 --- a/users/functionalhacker/home.nix +++ b/users/functionalhacker/home.nix @@ -1,9 +1,10 @@ -{ lib, config, pkgs, ... }: - -with lib.hm.gvariant; +{ pkgs, ... }: { - imports = [ ./programs/firefox.nix ]; + imports = [ + ./programs/default.nix + ]; + home = { username = "functionalhacker"; homeDirectory = "/home/functionalhacker"; @@ -24,292 +25,5 @@ with lib.hm.gvariant; yarn zip ]; - - file = { - # Just symlink neovim configuration for now. - # Declarative configuration coming soon™ - ".config/nvim".source = - config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/git/dotfiles/home/.config/nvim"; - }; - }; - - dconf.settings = { - "io/github/celluloid-player/celluloid" = { - dark-theme-enable = false; - mpv-config-enable = true; - mpv-config-file = "file:///home/functionalhacker/.config/mpv/mpv.conf"; - mpv-input-config-enable = true; - mpv-input-config-file = "file:///home/functionalhacker/.config/mpv/input.conf"; - settings-migrated = true; - }; - - "org/gnome/Connections" = { - first-run = false; - }; - - "org/gnome/desktop/a11y/mouse" = { - dwell-click-enabled = false; - dwell-threshold = 10; - dwell-time = 1.2; - secondary-click-enabled = true; - secondary-click-time = 1.2; - }; - - "org/gnome/desktop/calendar" = { - show-weekdate = true; - }; - - "org/gnome/desktop/input-sources" = { - show-all-sources = true; - sources = [ (mkTuple [ "xkb" "eu" ]) (mkTuple [ "xkb" "fi" ]) ]; - xkb-options = [ "lv3:ralt_switch" ]; - }; - - "org/gnome/desktop/peripherals/touchpad" = { - tap-to-click = true; - two-finger-scrolling-enabled = true; - }; - - "org/gnome/desktop/privacy" = { - disable-microphone = false; - old-files-age = mkUint32 14; - recent-files-max-age = -1; - remove-old-temp-files = true; - remove-old-trash-files = true; - }; - - "org/gnome/desktop/wm/keybindings" = { - close = [ "w" ]; - move-to-workspace-down = [ "j" ]; - move-to-workspace-left = [ "h" ]; - move-to-workspace-right = [ "l" ]; - move-to-workspace-up = [ "k" ]; - switch-to-workspace-down = [ "j" ]; - switch-to-workspace-left = [ "h" ]; - switch-to-workspace-right = [ "l" ]; - switch-to-workspace-up = [ "k" ]; - toggle-fullscreen = [ ]; - toggle-maximized = [ "f" ]; - }; - - "org/gnome/settings-daemon/plugins/media-keys" = { - custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" ]; - screensaver = [ "BackSpace" ]; - volume-step = 1; - www = [ "b" ]; - }; - - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { - binding = "Return"; - command = "kgx"; - name = "Open terminal"; - }; - - "org/gnome/file-roller/dialogs/new" = { - default-extension = ".tar.zst"; - }; - - "org/gnome/system/location" = { - enabled = true; - }; - - "org/gnome/tweaks" = { - show-extensions-notice = false; - }; - - }; - - programs = { - neovim = { - enable = true; - defaultEditor = true; - }; - - zsh = { - enable = true; - syntaxHighlighting.enable = true; - enableCompletion = false; - zplug = { - enable = true; - plugins = [ - { name = "mafredri/zsh-async"; } - { - name = "sindresorhus/pure"; - tags = [ "use:pure.zsh" "as:theme" ]; - } - { name = "Aloxaf/fzf-tab"; } - { name = "wfxr/forgit"; } - { name = "zsh-users/zsh-completions"; } - { name = "RobSis/zsh-completion-generator"; } - ]; - }; - initExtra = '' - # key timeout - export KEYTIMEOUT=1 - - # prompt customization - export PURE_PROMPT_SYMBOL="λ" - export PURE_PROMPT_VICMD_SYMBOL="y" - - # fzf settings - _fzf_compgen_path() { - resultcmd="$FZF_DEFAULT_COMMAND . $1" - eval "''${resultcmd} - } - _fzf_compgen_dir() { - resultcmd="$FZF_ALT_C_COMMAND . $1" - eval "''${resultcmd} - } - # nvim ftw! - export PAGER="$EDITOR -R +\"lua require 'pager'\"" - export GIT_PAGER="$EDITOR -c 'set ft=git' -R +\"lua require 'pager'\"" - export MANPAGER="$EDITOR +\"lua require 'pager'\" +Man!" - export SYSTEMD_EDITOR=$EDITOR - export SYSTEMD_PAGER=less - - - if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then - export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" - fi - - # use e to open command in editor - autoload edit-command-line; zle -N edit-command-line - bindkey -M vicmd e edit-command-line - - # bind delete in normal mode - bindkey -M vicmd '^[[3~' delete-char - - # Rebind fzf to ctrl+f - bindkey '^F' fzf-file-widget - bindkey '^T' transpose-chars - - # Remove grc alias from forgit since it - # collides with the grc colorizer - unalias grc; - - # Launch or attach zellij to existing session if logging in over ssh - if [[ -z "$ZELLIJ" && -n "$SSH_CONNECTION" ]]; then - exec zellij attach -c SSH - fi - ''; - shellAliases = { - # Navigation - ".." = "cd .."; - ls = "eza --icons --git"; - - # Editor - vi = "nvim"; - vim = "nvim"; - dv = "nvim +DiffviewOpen"; - - # systemd - sc = "systemctl"; - scu = "systemctl --user"; - jc = "journalctl"; - jcu = "journalctl --user"; - - # Move to trash instead of remove - rm = "trash"; - - # git shorthands - gc = "git commit"; - gac = "ga && gc"; - gs = "git status"; - gpull = "git pull"; - gpush = "git push"; - - o = "xdg-open"; - }; - - history = { - share = true; - extended = true; - ignoreAllDups = true; - }; - - historySubstringSearch.enable = true; - - dirHashes = { - git = "$HOME/git"; - dotfiles = "$HOME/git/dotfiles"; - dl = "$HOME/Downloads"; - }; - }; - - fzf = { - enable = true; - enableZshIntegration = true; - defaultCommand = "fd -Hlt f"; - defaultOptions = [ "-m --ansi --bind ctrl-a:toggle-all,ctrl-d:deselect-all,ctrl-t:toggle-all" ]; - fileWidgetCommand = "fd -Hlt f --strip-cwd-prefix"; - fileWidgetOptions = [ "--preview 'bat --color=always --style=numbers --line-range=:500 {}" ]; - changeDirWidgetCommand = "fd -Hlt d"; - changeDirWidgetOptions = [ "--preview 'eza -l {}'" ]; - }; - - git = { - enable = true; - userName = "Marko Korhonen"; - userEmail = "marko@korhonen.cc"; - - extraConfig = { - user.signingkey = "F2B9F713E7ED627336DD85E444FA3F28CD931BB0"; - commit = { - gpgsign = true; - signoff = true; - }; - tag = { - gpgsign = true; - signoff = true; - }; - merge = { - prompt = false; - conflictstyle = "diff3"; - tool = "nvim"; - }; - }; - }; - - zellij = { - enable = true; - settings = { - theme = "kanagawa"; - session_serialization = false; - keybinds = { - unbind = "Ctrl g"; - shared_except = { - _args = [ "locked" ]; - "bind \"Ctrl l\"" = { - SwitchToMode = "Locked"; - }; - }; - locked = { - "bind \"Ctrl l\"" = { - SwitchToMode = "Normal"; - }; - }; - }; - }; - }; - - password-store = { - enable = true; - package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]); - }; - - browserpass = { - enable = true; - browsers = [ "firefox" ]; - }; - - - eza = { - enable = true; - enableZshIntegration = true; - extraOptions = [ "--git" "--icons" ]; - }; - - ripgrep.enable = true; - bat.enable = true; }; } diff --git a/users/functionalhacker/programs/bat.nix b/users/functionalhacker/programs/bat.nix new file mode 100644 index 00000000..9e7aeb5c --- /dev/null +++ b/users/functionalhacker/programs/bat.nix @@ -0,0 +1,5 @@ +{ ... }: + +{ + programs.bat.enable = true; +} diff --git a/users/functionalhacker/programs/default.nix b/users/functionalhacker/programs/default.nix new file mode 100644 index 00000000..a488fcc5 --- /dev/null +++ b/users/functionalhacker/programs/default.nix @@ -0,0 +1,16 @@ +{ ... }: + +{ + imports = [ + ./programs/bat.nix + ./programs/default.nix + ./programs/eza.nix + ./programs/firefox.nix + ./programs/git.nix + ./programs/neovim.nix + ./programs/pass.nix + ./programs/ripgrep.nix + ./programs/zellij.nix + ./programs/zsh.nix + ]; +} diff --git a/users/functionalhacker/programs/eza.nix b/users/functionalhacker/programs/eza.nix new file mode 100644 index 00000000..3a98977c --- /dev/null +++ b/users/functionalhacker/programs/eza.nix @@ -0,0 +1,10 @@ +{ ... }: + +{ + programs.eza = { + enable = true; + enableZshIntegration = true; + extraOptions = [ "--git" "--icons" ]; + }; + +} diff --git a/users/functionalhacker/programs/git.nix b/users/functionalhacker/programs/git.nix new file mode 100644 index 00000000..b0e95f43 --- /dev/null +++ b/users/functionalhacker/programs/git.nix @@ -0,0 +1,26 @@ +{ ... }: + +{ + programs.git = { + enable = true; + userName = "Marko Korhonen"; + userEmail = "marko@korhonen.cc"; + + extraConfig = { + user.signingkey = "F2B9F713E7ED627336DD85E444FA3F28CD931BB0"; + commit = { + gpgsign = true; + signoff = true; + }; + tag = { + gpgsign = true; + signoff = true; + }; + merge = { + prompt = false; + conflictstyle = "diff3"; + tool = "nvim"; + }; + }; + }; +} diff --git a/users/functionalhacker/programs/neovim.nix b/users/functionalhacker/programs/neovim.nix new file mode 100644 index 00000000..b9b98809 --- /dev/null +++ b/users/functionalhacker/programs/neovim.nix @@ -0,0 +1,15 @@ +{ config, ... }: + +{ + programs.neovim = { + enable = true; + defaultEditor = true; + }; + + # Just symlink neovim configuration for now. + # Declarative configuration coming soon™ + home.file = { + ".config/nvim".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/git/dotfiles/home/.config/nvim"; + }; +} diff --git a/users/functionalhacker/programs/pass.nix b/users/functionalhacker/programs/pass.nix new file mode 100644 index 00000000..90c24881 --- /dev/null +++ b/users/functionalhacker/programs/pass.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +{ + programs = { + password-store = { + enable = true; + package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]); + }; + + browserpass = { + enable = true; + browsers = [ "firefox" ]; + }; + + }; +} diff --git a/users/functionalhacker/programs/ripgrep.nix b/users/functionalhacker/programs/ripgrep.nix new file mode 100644 index 00000000..33525a2c --- /dev/null +++ b/users/functionalhacker/programs/ripgrep.nix @@ -0,0 +1,5 @@ +{ ... }: + +{ + programs.ripgrep.enable = true; +} diff --git a/users/functionalhacker/programs/zellij.nix b/users/functionalhacker/programs/zellij.nix new file mode 100644 index 00000000..098da154 --- /dev/null +++ b/users/functionalhacker/programs/zellij.nix @@ -0,0 +1,25 @@ +{ ... }: + +{ + programs.zellij = { + enable = true; + settings = { + theme = "kanagawa"; + session_serialization = false; + keybinds = { + unbind = "Ctrl g"; + shared_except = { + _args = [ "locked" ]; + "bind \"Ctrl l\"" = { + SwitchToMode = "Locked"; + }; + }; + locked = { + "bind \"Ctrl l\"" = { + SwitchToMode = "Normal"; + }; + }; + }; + }; + }; +} diff --git a/users/functionalhacker/programs/zsh.nix b/users/functionalhacker/programs/zsh.nix new file mode 100644 index 00000000..1770148f --- /dev/null +++ b/users/functionalhacker/programs/zsh.nix @@ -0,0 +1,115 @@ +{ ... }: + +{ + programs = { + zsh = { + enable = true; + syntaxHighlighting.enable = true; + enableCompletion = false; + zplug = { + enable = true; + plugins = [ + { name = "mafredri/zsh-async"; } + { + name = "sindresorhus/pure"; + tags = [ "use:pure.zsh" "as:theme" ]; + } + { name = "Aloxaf/fzf-tab"; } + { name = "wfxr/forgit"; } + { name = "zsh-users/zsh-completions"; } + { name = "RobSis/zsh-completion-generator"; } + ]; + }; + initExtra = '' + # key timeout + export KEYTIMEOUT=1 + + # prompt customization + export PURE_PROMPT_SYMBOL="λ" + export PURE_PROMPT_VICMD_SYMBOL="y" + + # fzf settings + _fzf_compgen_path() { + resultcmd="$FZF_DEFAULT_COMMAND . $1" + eval "''${resultcmd} + } + _fzf_compgen_dir() { + resultcmd="$FZF_ALT_C_COMMAND . $1" + eval "''${resultcmd} + } + # nvim ftw! + export PAGER="$EDITOR -R +\"lua require 'pager'\"" + export GIT_PAGER="$EDITOR -c 'set ft=git' -R +\"lua require 'pager'\"" + export MANPAGER="$EDITOR +\"lua require 'pager'\" +Man!" + export SYSTEMD_EDITOR=$EDITOR + export SYSTEMD_PAGER=less + + + if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" + fi + + # use e to open command in editor + autoload edit-command-line; zle -N edit-command-line + bindkey -M vicmd e edit-command-line + + # bind delete in normal mode + bindkey -M vicmd '^[[3~' delete-char + + # Rebind fzf to ctrl+f + bindkey '^F' fzf-file-widget + bindkey '^T' transpose-chars + + # Remove grc alias from forgit since it + # collides with the grc colorizer + unalias grc; + + # Launch or attach zellij to existing session if logging in over ssh + if [[ -z "$ZELLIJ" && -n "$SSH_CONNECTION" ]]; then + exec zellij attach -c SSH + fi + ''; + shellAliases = { + # Navigation + ".." = "cd .."; + + # Editor + vi = "nvim"; + vim = "nvim"; + dv = "nvim +DiffviewOpen"; + + # systemd + sc = "systemctl"; + scu = "systemctl --user"; + jc = "journalctl"; + jcu = "journalctl --user"; + + # Move to trash instead of remove + rm = "trash"; + + # git shorthands + gc = "git commit"; + gac = "ga && gc"; + gs = "git status"; + gpull = "git pull"; + gpush = "git push"; + + o = "xdg-open"; + }; + + history = { + share = true; + extended = true; + ignoreAllDups = true; + }; + + historySubstringSearch.enable = true; + + dirHashes = { + git = "$HOME/git"; + dotfiles = "$HOME/git/dotfiles"; + dl = "$HOME/Downloads"; + }; + }; + }; +}