initial commit
This commit is contained in:
10
users/modules/basics.nix
Normal file
10
users/modules/basics.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
programs = {
|
||||
fd.enable = true;
|
||||
fzf.enable = true;
|
||||
home-manager.enable = true;
|
||||
htop.enable = true;
|
||||
jq.enable = true;
|
||||
ripgrep.enable = true;
|
||||
};
|
||||
}
|
||||
25
users/modules/bat.nix
Normal file
25
users/modules/bat.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.bat;
|
||||
in {
|
||||
options.modules.bat.extras = mkEnableOption "Enables extra packages for bat.";
|
||||
config.programs.bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
theme = "Nord";
|
||||
map-syntax = [
|
||||
".spacemacs*:Lisp"
|
||||
];
|
||||
};
|
||||
extraPackages = mkIf cfg.extras (with pkgs.bat-extras; [
|
||||
batman
|
||||
batpipe
|
||||
batgrep
|
||||
]);
|
||||
};
|
||||
}
|
||||
24
users/modules/btop.nix
Normal file
24
users/modules/btop.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{pkgs, ...}: {
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
package = pkgs.btop.override {
|
||||
rocmSupport = true;
|
||||
cudaSupport = true;
|
||||
};
|
||||
settings = {
|
||||
color_theme = "${pkgs.btop}/share/btop/themes/nord.theme";
|
||||
cpu_bottom = false;
|
||||
cpu_sensor = "auto";
|
||||
io_graph_combined = false;
|
||||
io_mode = true;
|
||||
only_physical = true;
|
||||
proc_tree = true;
|
||||
rounded_corners = true;
|
||||
show_disks = true;
|
||||
show_gpu_info = "on";
|
||||
show_uptime = true;
|
||||
theme_background = true;
|
||||
vim_keys = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
16
users/modules/default.nix
Normal file
16
users/modules/default.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
imports = [
|
||||
./basics.nix
|
||||
./bat.nix
|
||||
./btop.nix
|
||||
./direnv.nix
|
||||
./eza.nix
|
||||
./mopidy.nix
|
||||
./nh.nix
|
||||
./shell
|
||||
./ssh.nix
|
||||
./tealdeer.nix
|
||||
./tmux.nix
|
||||
./vcs
|
||||
];
|
||||
}
|
||||
7
users/modules/direnv.nix
Normal file
7
users/modules/direnv.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
config.global.load_dotenv = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
36
users/modules/emacs.nix
Normal file
36
users/modules/emacs.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
emacsDefaultPackage = with pkgs; ((emacsPackagesFor emacsNativeComp).emacsWithPackages (
|
||||
epkgs: [
|
||||
epkgs.vterm
|
||||
epkgs.mu4e
|
||||
epkgs.pdf-tools
|
||||
]
|
||||
));
|
||||
cfg = config.modules.emacs;
|
||||
in {
|
||||
options.modules.emacs = {
|
||||
enable = lib.mkEnableOption "enables Emacs";
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = emacsDefaultPackage;
|
||||
};
|
||||
service = lib.mkEnableOption "enables Emacs service";
|
||||
};
|
||||
|
||||
config = {
|
||||
programs.emacs = lib.mkIf cfg.enable {
|
||||
enable = true;
|
||||
inherit (cfg) package;
|
||||
};
|
||||
services.emacs = lib.mkIf cfg.service {
|
||||
enable = true;
|
||||
inherit (cfg) package;
|
||||
startWithUserSession = "graphical";
|
||||
};
|
||||
};
|
||||
}
|
||||
4739
users/modules/emoji.nix
Normal file
4739
users/modules/emoji.nix
Normal file
File diff suppressed because it is too large
Load Diff
8
users/modules/eza.nix
Normal file
8
users/modules/eza.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
colors = "auto";
|
||||
icons = "auto";
|
||||
git = true;
|
||||
};
|
||||
}
|
||||
8
users/modules/hyprland.nix
Normal file
8
users/modules/hyprland.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
imports = [../../programs/hyprland.nix];
|
||||
modules.hyprland = {
|
||||
enable = true;
|
||||
config = builtins.readFile ./config/hypr/hyprland.conf;
|
||||
waybar.style = ./config/waybar/style.css;
|
||||
};
|
||||
}
|
||||
6
users/modules/kdeconnect.nix
Normal file
6
users/modules/kdeconnect.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
services.kdeconnect = {
|
||||
enable = true;
|
||||
indicator = true;
|
||||
};
|
||||
}
|
||||
89
users/modules/kitty.nix
Normal file
89
users/modules/kitty.nix
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enable_audio_bell = true;
|
||||
enabled_layouts = "fat,fat:mirrored=true,tall,tall:mirrored=true";
|
||||
kitty_mod = "ctrl+shift";
|
||||
};
|
||||
keybindings = {
|
||||
"alt+c" = "copy_to_clipboard";
|
||||
"kitty_mod+c" = "copy_to_clipboard";
|
||||
"alt+v" = "paste_from_clipboard";
|
||||
"kitty_mod+v" = "paste_from_clipboard";
|
||||
|
||||
"kitty_mod+s>c" = "show_scrollback";
|
||||
"kitty_mod+s>down" = "scroll_line_down";
|
||||
"kitty_mod+s>t" = "scroll_line_down";
|
||||
"kitty_mod+s>up" = "scroll_line_up";
|
||||
"kitty_mod+s>s" = "scroll_line_up";
|
||||
"kitty_mod+s>end" = "scroll_end";
|
||||
"kitty_mod+s>home" = "scroll_home";
|
||||
"kitty_mod+s>page_down" = "scroll_page_down";
|
||||
"kitty_mod+s>page_up" = "scroll_page_up";
|
||||
|
||||
"kitty_mod+enter" = "new_window";
|
||||
"kitty_mod+w>q" = "close_window";
|
||||
"kitty_mod+w>p" = "next_window";
|
||||
"kitty_mod+w>n" = "previous_window";
|
||||
"kitty_mod+w>f" = "move_window_forward";
|
||||
"kitty_mod+w>b" = "move_window_backward";
|
||||
"kitty_mod+w>t" = "move_window_to_top";
|
||||
"kitty_mod+w>r" = "start_resizing_window";
|
||||
"kitty_mod+w>1" = "first_window";
|
||||
"kitty_mod+w>2" = "second_window";
|
||||
"kitty_mod+w>3" = "third_window";
|
||||
"kitty_mod+w>4" = "fourth_window";
|
||||
"kitty_mod+w>5" = "fifth_window";
|
||||
"kitty_mod+w>6" = "sixth_window";
|
||||
"kitty_mod+w>7" = "seventh_window";
|
||||
"kitty_mod+w>8" = "eighth_window";
|
||||
"kitty_mod+w>9" = "ninth_window";
|
||||
"kitty_mod+w>0" = "tenth_window";
|
||||
|
||||
"kitty_mod+tab>n" = "next_tab";
|
||||
"kitty_mod+tab>p" = "previous_tab";
|
||||
"kitty_mod+tab>c" = "new_tab";
|
||||
"kitty_mod+tab>q" = "close_tab";
|
||||
"kitty_mod+tab>shift+n" = "move_tab_backward";
|
||||
"kitty_mod+tab>shift+p" = "move_tab_forward";
|
||||
"kitty_mod+tab>t" = "set_tab_title";
|
||||
|
||||
"kitty_mod+l" = "next_layout";
|
||||
|
||||
"kitty_mod+f>equal" = "change_font_size all 0";
|
||||
"kitty_mod+f>kp_add" = "change_font_size all +2.0";
|
||||
"kitty_mod+f>plus" = "change_font_size all +2.0";
|
||||
"kitty_mod+f>kp_subtract" = "change_font_size all -2.0";
|
||||
"kitty_mod+f>minus" = "change_font_size all -2.0";
|
||||
|
||||
"kitty_mod+shift+h" = "kitten hints";
|
||||
"kitty_mod+h>p" = "kitten hints --type path --program -";
|
||||
"kitty_mod+h>shift+p" = "kitten hints --type path";
|
||||
"kitty_mod+h>l" = "kitten hints --type line --program -";
|
||||
"kitty_mod+h>w" = "kitten hints --type word --program -";
|
||||
"kitty_mod+h>h" = "kitten hints --type hash --program -";
|
||||
"kitty_mod+h>n" = "kitten hints --type linenum";
|
||||
"kitty_mod+h>y" = "kitten hints --type hyperlink";
|
||||
|
||||
"kitty_mod+f10" = "toggle_maximized";
|
||||
"kitty_mod+f11" = "toggle_fullscreen";
|
||||
|
||||
"kitty_mod+a>equal" = "set_background_opacity 1";
|
||||
"kitty_mod+a>d" = "set_background_opacity default";
|
||||
"kitty_mod+a>plus" = "set_background_opacity +0.1";
|
||||
"kitty_mod+a>up" = "set_background_opacity +0.1";
|
||||
"kitty_mod+a>kp_add" = "set_background_opacity +0.1";
|
||||
"kitty_mod+a>minus" = "set_background_opacity -0.1";
|
||||
"kitty_mod+a>down" = "set_background_opacity -0.1";
|
||||
"kitty_mod+a>kp_substract" = "set_background_opacity -0.1";
|
||||
|
||||
"kitty_mod+delete" = "clear_terminal reset active";
|
||||
"kitty_mod+escape" = "kitty_shell window";
|
||||
"kitty_mod+f2" = "edit_config_file";
|
||||
"kitty_mod+n" = "new_os_window";
|
||||
"kitty_mod+o" = "pass_selection_to_program";
|
||||
"kitty_mod+u" = "kitten unicode_input";
|
||||
};
|
||||
};
|
||||
}
|
||||
60
users/modules/mbsync.nix
Normal file
60
users/modules/mbsync.nix
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.mbsync;
|
||||
in {
|
||||
options.modules.mbsync = {
|
||||
enable = mkEnableOption "Enables mbsync";
|
||||
passwordFile = mkOption {
|
||||
type = types.str;
|
||||
example = "/var/email/password";
|
||||
};
|
||||
service.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "mail.phundrak.com";
|
||||
};
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "lucien@phundrak.com";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.user.services.mbsync.unitConfig.After = ["sops-nix.service"];
|
||||
services.mbsync.enable = cfg.service.enable;
|
||||
programs.mbsync = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
IMAPAccount Main
|
||||
Host ${cfg.host}
|
||||
User ${cfg.user}
|
||||
PassCmd "cat ${cfg.passwordFile}"
|
||||
SSLType IMAPS
|
||||
SSLVersion TLSv1.2
|
||||
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||
|
||||
IMAPStore main-remote
|
||||
Account Main
|
||||
|
||||
MaildirStore main-local
|
||||
Subfolders Verbatim
|
||||
Path ~/Mail/
|
||||
Inbox ~/Mail/Inbox
|
||||
|
||||
Channel main
|
||||
Far :main-remote:
|
||||
Near :main-local:
|
||||
Create Both
|
||||
SyncState *
|
||||
Patterns *
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
46
users/modules/mopidy.nix
Normal file
46
users/modules/mopidy.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.mopidy;
|
||||
in {
|
||||
options.modules.mopidy = {
|
||||
enable = mkEnableOption "Enables Mopidy.";
|
||||
};
|
||||
|
||||
config.services.mopidy = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
extensionPackages = with pkgs; [
|
||||
mopidy-bandcamp
|
||||
mopidy-mpd
|
||||
mopidy-mpris
|
||||
mopidy-muse
|
||||
mopidy-notify
|
||||
mopidy-spotify
|
||||
];
|
||||
extraConfigFiles = [
|
||||
config.sops.secrets."mopidy/bandcamp".path
|
||||
config.sops.secrets."mopidy/spotify".path
|
||||
];
|
||||
settings = {
|
||||
mpd = {
|
||||
enabled = true;
|
||||
hostname = "::";
|
||||
port = 6600;
|
||||
};
|
||||
mpris.enabled = true;
|
||||
muse = {
|
||||
enabled = true;
|
||||
mopidy_host = "localhost";
|
||||
mopidy_port = 6690;
|
||||
mopidy_ssl = false;
|
||||
snapcast_host = "localhost";
|
||||
snapcast_port = 1780;
|
||||
snapcast_ssl = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
21
users/modules/mpd.nix
Normal file
21
users/modules/mpd.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
services.mpd = {
|
||||
enable = true;
|
||||
musicDirectory = "/home/phundrak/Music";
|
||||
playlistDirectory = "/home/phundrak/Music/playlists";
|
||||
extraConfig = ''
|
||||
follow_outside_symlinks "yes"
|
||||
follow_inside_symlinks "yes"
|
||||
|
||||
bind_to_address "localhost"
|
||||
auto_update "yes"
|
||||
|
||||
audio_output {
|
||||
type "fifo"
|
||||
name "my_fifo"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
60
users/modules/mpv.nix
Normal file
60
users/modules/mpv.nix
Normal file
@@ -0,0 +1,60 @@
|
||||
{pkgs, ...}: {
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
force-window = "immediate";
|
||||
ytdl-format = "bestvideo[height<=1080]+bestaudio";
|
||||
force-seekable = true; # force streams to be seekable
|
||||
cache-default = 4000000;
|
||||
slang = "jpn,jp,eng,en,fra,fr";
|
||||
alang = "eng,en,fra,fr";
|
||||
gpu-api = "vulkan";
|
||||
osc = true;
|
||||
profile = "gpu-hq";
|
||||
geometry = "50%x50%";
|
||||
autofit-larger = "90%x90%";
|
||||
|
||||
# Screenshots
|
||||
screenshot-format = "png";
|
||||
screenshot-high-bit-depth = true;
|
||||
screenshot-png-compression = 6;
|
||||
screenshot-directory = "~/Pictures/Screenshots/mpv";
|
||||
|
||||
deband = true;
|
||||
deband-iterations = 2;
|
||||
deband-threshold = 35;
|
||||
deband-range = 20;
|
||||
deband-grand = 5;
|
||||
|
||||
dither-depth = "auto";
|
||||
|
||||
sub-auto = "fuzzy";
|
||||
|
||||
scale = "ewa_lanczossharp";
|
||||
dscale = "mitchel";
|
||||
cscale = "ewa_lanczossharp";
|
||||
};
|
||||
scripts = with pkgs.mpvScripts; [
|
||||
crop
|
||||
encode
|
||||
inhibit-gnome
|
||||
mpris
|
||||
mpv-cheatsheet
|
||||
quality-menu
|
||||
sponsorblock
|
||||
thumbfast
|
||||
# twitch-chat
|
||||
youtube-chat
|
||||
youtube-upnext
|
||||
];
|
||||
bindings = {
|
||||
Q = "quit-watch-later";
|
||||
P = "show-progress";
|
||||
"/" = "add volume -2";
|
||||
"*" = "add volume 2";
|
||||
m = "cycle mute";
|
||||
M = "vf toggle hflip";
|
||||
"Ctrl+r" = "cycle_values video-rotate \"90\" \"180\" \"270\" \"0\"";
|
||||
};
|
||||
};
|
||||
}
|
||||
20
users/modules/nh.nix
Normal file
20
users/modules/nh.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.nh;
|
||||
in {
|
||||
options.modules.nh.flake = mkOption {
|
||||
type = types.path;
|
||||
default = "/home/phundrak/.dotfiles";
|
||||
example = "/etc/nixos";
|
||||
};
|
||||
config.programs.nh = {
|
||||
enable = true;
|
||||
clean.enable = true;
|
||||
clean.extraArgs = "--keep-since 15d --keep 5";
|
||||
inherit (cfg) flake;
|
||||
};
|
||||
}
|
||||
3
users/modules/qt.nix
Normal file
3
users/modules/qt.nix
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
qt.enable = true;
|
||||
}
|
||||
43
users/modules/shell/bash.nix
Normal file
43
users/modules/shell/bash.nix
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.bash;
|
||||
in {
|
||||
options.modules.bash = {
|
||||
enable = lib.mkEnableOption "enables bash";
|
||||
aliases = lib.mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = {
|
||||
cp = "cp -i";
|
||||
lns = "ln -si";
|
||||
};
|
||||
};
|
||||
bashrcExtra = lib.mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = cfg.aliases;
|
||||
shellOptions = [
|
||||
"histappend"
|
||||
"cmdhist"
|
||||
"lithist"
|
||||
"checkwinsize"
|
||||
"extglob"
|
||||
"globstar"
|
||||
"checkjobs"
|
||||
"autocd"
|
||||
"cdspell"
|
||||
"dirspell"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
124
users/modules/shell/default.nix
Normal file
124
users/modules/shell/default.nix
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
aliases = {
|
||||
df = "df -H";
|
||||
diskspace = "sudo df -h | grep -E \"sd|lv|Size\"";
|
||||
du = "du -ch";
|
||||
meminfo = "free -m -l -t";
|
||||
gpumeminfo = "grep -i --color memory /var/log/Xorg.0.log";
|
||||
cpuinfo = "lscpu";
|
||||
pscpu = "ps auxf | sort -nr -k 3";
|
||||
pscpu10 = "ps auxf | sort -nr -k 3 | head -10";
|
||||
psmem = "ps auxf | sort -nr -k 4";
|
||||
psmem10 = "ps auxf | sort -nr -k 4 | head -10";
|
||||
|
||||
s = "systemctl";
|
||||
|
||||
dc = "docker compose";
|
||||
dcd = "docker compose down";
|
||||
dcl = "docker compose logs";
|
||||
dclf = "docker compose logs -f";
|
||||
dcp = "docker compose pull";
|
||||
dcu = "docker compose up";
|
||||
dcud = "docker compose up -d";
|
||||
dcudp = "docker compose up -d --pull=always";
|
||||
dcr = "docker compose restart";
|
||||
enw = "emacsclient -nw";
|
||||
e = "emacsclient -n -c";
|
||||
|
||||
cp = "cp -i";
|
||||
rsync = "rsync -Pa --progress";
|
||||
ln = "ln -i";
|
||||
lns = "ln -si";
|
||||
mv = "mv -i";
|
||||
rm = "rm -Iv";
|
||||
rmd = "rm --preserve-root -Irv";
|
||||
rmdf = "rm --preserve-root -Irfv";
|
||||
rmf = "rm --preserve-root -Ifv";
|
||||
chgrp = "chgrp --preserve-root -v";
|
||||
chmod = "chmod --preserve-root -v";
|
||||
chown = "chown --preserve-root -v";
|
||||
lsl = "eza -halg@ --group-directories-first --git";
|
||||
|
||||
flac = "yt-dlp -x --audio-format flac --audio-quality 0 o \"~/Music/%(uploader)s/%(title)s.%(ext)s\"";
|
||||
please = "sudo -A";
|
||||
wget = "wget --hsts-file=\"$XDG_DATA_HOME/wget-hsts\" -c";
|
||||
};
|
||||
cfg = config.modules.shell;
|
||||
in {
|
||||
imports = [
|
||||
./bash.nix
|
||||
./fish.nix
|
||||
./starship.nix
|
||||
./zsh.nix
|
||||
];
|
||||
|
||||
options.modules.shell = {
|
||||
enableBash = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "enables bash";
|
||||
};
|
||||
enableFish = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "enables fish";
|
||||
};
|
||||
enableZsh = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "enables zsh";
|
||||
};
|
||||
starship = {
|
||||
enable = mkEnableOption "Enables the starship prompt.";
|
||||
jjIntegration = mkEnableOption "Enables Jujutsu integration in starship.";
|
||||
};
|
||||
zoxide = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "enables zoxide";
|
||||
};
|
||||
replaceCd = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "makes zoxide replace cd";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
home.shell = {
|
||||
enableFishIntegration = mkDefault cfg.enableFish;
|
||||
enableBashIntegration = mkDefault cfg.enableBash;
|
||||
enableZshIntegration = mkDefault cfg.enableZsh;
|
||||
};
|
||||
|
||||
modules = {
|
||||
fish = {
|
||||
enable = mkDefault cfg.enableFish;
|
||||
abbrs = mkDefault aliases;
|
||||
};
|
||||
bash = {
|
||||
enable = mkDefault cfg.enableBash;
|
||||
aliases = mkDefault aliases;
|
||||
};
|
||||
zsh = {
|
||||
enable = mkDefault cfg.enableZsh;
|
||||
abbrs = mkDefault aliases;
|
||||
};
|
||||
inherit (cfg) starship;
|
||||
};
|
||||
|
||||
programs.zoxide = mkIf cfg.zoxide.enable {
|
||||
enable = true;
|
||||
options = mkIf cfg.zoxide.replaceCd [
|
||||
"--cmd cd"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
75
users/modules/shell/fish.nix
Normal file
75
users/modules/shell/fish.nix
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.fish;
|
||||
in {
|
||||
options.modules.fish = {
|
||||
enable = lib.mkEnableOption "enables fish";
|
||||
abbrs = lib.mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = {
|
||||
cp = "cp -i";
|
||||
lns = "ln -si";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
shellAbbrs = cfg.abbrs;
|
||||
preferAbbrs = true;
|
||||
shellInit = ''
|
||||
function fish_command_not_found
|
||||
__fish_default_command_not_found_handler $argv
|
||||
end
|
||||
'';
|
||||
plugins = [
|
||||
{
|
||||
name = "bass";
|
||||
inherit (pkgs.fishPlugins.bass) src;
|
||||
# src = pkgs.fishPlugins.bass.src;
|
||||
}
|
||||
{
|
||||
name = "colored-man-pages";
|
||||
inherit (pkgs.fishPlugins.colored-man-pages) src;
|
||||
}
|
||||
{
|
||||
name = "done";
|
||||
inherit (pkgs.fishPlugins.done) src;
|
||||
}
|
||||
{
|
||||
name = "fzf";
|
||||
inherit (pkgs.fishPlugins.fzf) src;
|
||||
}
|
||||
{
|
||||
name = "pisces";
|
||||
inherit (pkgs.fishPlugins.pisces) src;
|
||||
}
|
||||
{
|
||||
name = "getopts.fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jorgebucaran";
|
||||
repo = "getopts.fish";
|
||||
rev = "4b74206725c3e11d739675dc2bb84c77d893e901";
|
||||
sha256 = "9hRFBmjrCgIUNHuOJZvOufyLsfreJfkeS6XDcCPesvw=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "replay.fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jorgebucaran";
|
||||
repo = "replay.fish";
|
||||
rev = "d2ecacd3fe7126e822ce8918389f3ad93b14c86c";
|
||||
sha256 = "TzQ97h9tBRUg+A7DSKeTBWLQuThicbu19DHMwkmUXdg=";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
45
users/modules/shell/starship.nix
Normal file
45
users/modules/shell/starship.nix
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.starship;
|
||||
in {
|
||||
options.modules.starship = {
|
||||
enable = mkEnableOption "Enables the starship prompt.";
|
||||
jjIntegration = mkEnableOption "Enables Jujutsu integration in starship.";
|
||||
};
|
||||
|
||||
config.programs.starship = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
enableTransience = true;
|
||||
settings.custom = {
|
||||
jj = {
|
||||
description = "The current jj status";
|
||||
detect_folders = [".jj"];
|
||||
symbol = "🥋 ";
|
||||
command = ''
|
||||
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
|
||||
separate(" ",
|
||||
change_id.shortest(4),
|
||||
bookmarks,
|
||||
"|",
|
||||
concat(
|
||||
if(conflict, "💥"),
|
||||
if(divergent, "🚧"),
|
||||
if(hidden, "👻"),
|
||||
if(immutable, "🔒"),
|
||||
),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ if(empty, "(empty)"),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ coalesce(
|
||||
truncate_end(29, description.first_line(), "…"),
|
||||
"(no description set)",
|
||||
) ++ raw_escape_sequence("\x1b[0m"),
|
||||
)
|
||||
'
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
96
users/modules/shell/zsh.nix
Normal file
96
users/modules/shell/zsh.nix
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.zsh;
|
||||
in {
|
||||
options.modules.zsh = {
|
||||
enable = lib.mkEnableOption "enables zsh";
|
||||
abbrs = lib.mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = {
|
||||
cp = "cp -i";
|
||||
lns = "ln -si";
|
||||
};
|
||||
};
|
||||
zshrcExtra = lib.mkOption {
|
||||
type = types.lines;
|
||||
default = ''
|
||||
bindkey -e
|
||||
bindkey '^p' history-search-backward
|
||||
bindkey '^n' history-search-forward
|
||||
|
||||
# Completion styling
|
||||
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
|
||||
zstyle ':completion:*' list-colors "''${(s.:.)LS_COLORS}"
|
||||
zstyle ':completion:*' menu no
|
||||
zstyle ':fzf-tab:complete:cd:*' fzf-preview '${pkgs.eza}/bin/eza $realpath'
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config.programs.zsh = lib.mkIf cfg.enable {
|
||||
enable = true;
|
||||
autocd = true;
|
||||
autosuggestion = {
|
||||
enable = true;
|
||||
strategy = ["match_prev_cmd" "completion"];
|
||||
};
|
||||
enableCompletion = true;
|
||||
history = {
|
||||
findNoDups = true;
|
||||
ignoreAllDups = true;
|
||||
ignoreDups = true;
|
||||
ignoreSpace = true;
|
||||
path = "${config.xdg.dataHome}/zsh/zsh_history";
|
||||
saveNoDups = true;
|
||||
};
|
||||
historySubstringSearch.enable = true;
|
||||
initContent = cfg.zshrcExtra;
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [
|
||||
"dirhistory"
|
||||
"sudo"
|
||||
];
|
||||
};
|
||||
plugins = [
|
||||
{
|
||||
name = "fzf-tab";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "Aloxaf";
|
||||
repo = "fzf-tab";
|
||||
rev = "v1.2.0";
|
||||
sha256 = "sha256-q26XVS/LcyZPRqDNwKKA9exgBByE0muyuNb0Bbar2lY=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "auto-notify";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "MichaelAquilina";
|
||||
repo = "zsh-auto-notify";
|
||||
rev = "0.11.0";
|
||||
sha256 = "sha256-8r5RsyldJIzlWr9+G8lrkHvJ8KxTVO859M//wDnYOUY=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "zsh-autopair";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "hlissner";
|
||||
repo = "zsh-autopair";
|
||||
rev = "449a7c3d095bc8f3d78cf37b9549f8bb4c383f3d";
|
||||
sha256 = "sha256-3zvOgIi+q7+sTXrT+r/4v98qjeiEL4Wh64rxBYnwJvQ=";
|
||||
};
|
||||
}
|
||||
];
|
||||
syntaxHighlighting.enable = true;
|
||||
zsh-abbr = {
|
||||
enable = true;
|
||||
abbreviations = cfg.abbrs;
|
||||
};
|
||||
};
|
||||
}
|
||||
23
users/modules/ssh.nix
Normal file
23
users/modules/ssh.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.ssh;
|
||||
in {
|
||||
options.modules.ssh = {
|
||||
enable = mkEnableOption "enables SSH";
|
||||
hosts = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
programs.ssh = mkIf cfg.enable {
|
||||
enable = true;
|
||||
includes = mkIf (cfg.hosts != null) [cfg.hosts];
|
||||
};
|
||||
};
|
||||
}
|
||||
6
users/modules/tealdeer.nix
Normal file
6
users/modules/tealdeer.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
programs.tealdeer = {
|
||||
enable = true;
|
||||
enableAutoUpdates = true;
|
||||
};
|
||||
}
|
||||
86
users/modules/tmux.nix
Normal file
86
users/modules/tmux.nix
Normal file
@@ -0,0 +1,86 @@
|
||||
{pkgs, ...}: {
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
baseIndex = 1;
|
||||
clock24 = true;
|
||||
customPaneNavigationAndResize = true;
|
||||
keyMode = "vi";
|
||||
mouse = true;
|
||||
newSession = true;
|
||||
prefix = "M-space";
|
||||
plugins = with pkgs.tmuxPlugins; [
|
||||
cpu
|
||||
nord
|
||||
prefix-highlight
|
||||
resurrect
|
||||
sensible
|
||||
yank
|
||||
];
|
||||
extraConfig = ''
|
||||
set-option -sa terminal-overrides ",xterm*:Tc"
|
||||
|
||||
unbind C-b
|
||||
|
||||
bind-key -T prefix « select-window -p
|
||||
bind-key -T prefix » select-window -n
|
||||
bind-key -T prefix Tab switch-client -T windows
|
||||
bind-key -T prefix w switch-client -T pane
|
||||
bind-key -T prefix y switch-client -T copy-mode
|
||||
|
||||
bind-key -T pane / split-window -h -c "#{pane-current_path}"
|
||||
bind-key -T pane - split-window -v -c "#{pane-current_path}"
|
||||
bind-key -T pane c select-pane -L
|
||||
bind-key -T pane t select-pane -D
|
||||
bind-key -T pane s select-pane -U
|
||||
bind-key -T pane r select-pane -R
|
||||
bind-key -T pane f resize-pane -Z
|
||||
bind-key -T pane . switch-client -T pane-resize
|
||||
|
||||
bind-key -T pane-resize c resize-pane -L 5\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize t resize-pane -D 5\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize s resize-pane -U 5\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize r resize-pane -R 5\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize C resize-pane -L\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize T resize-pane -D\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize S resize-pane -U\; switch-client -T pane-resize
|
||||
bind-key -T pane-resize R resize-pane -R\; switch-client -T pane-resize
|
||||
|
||||
bind-key -T windows c new-window
|
||||
bind-key -T windows n next-window
|
||||
bind-key -T windows p previous-window
|
||||
|
||||
bind-key -T windows \" select-window -t :=1
|
||||
bind-key -T windows « select-window -t :=2
|
||||
bind-key -T windows » select-window -t :=3
|
||||
bind-key -T windows ( select-window -t :=4
|
||||
bind-key -T windows ) select-window -t :=5
|
||||
bind-key -T windows @ select-window -t :=6
|
||||
bind-key -T windows + select-window -t :=7
|
||||
bind-key -T windows - select-window -t :=8
|
||||
bind-key -T windows / select-window -t :=9
|
||||
bind-key -T windows * select-window -t :=10
|
||||
|
||||
unbind -T copy-mode-vi H
|
||||
unbind -T copy-mode-vi J
|
||||
unbind -T copy-mode-vi K
|
||||
unbind -T copy-mode-vi L
|
||||
unbind -T copy-mode-vi h
|
||||
unbind -T copy-mode-vi j
|
||||
unbind -T copy-mode-vi k
|
||||
unbind -T copy-mode-vi l
|
||||
|
||||
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
||||
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
|
||||
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
|
||||
bind-key -T copy-mode-vi C send-keys -X top-line
|
||||
bind-key -T copy-mode-vi J send-keys -X jump-to-backward
|
||||
bind-key -T copy-mode-vi S send-keys -X scroll-up
|
||||
bind-key -T copy-mode-vi R send-keys -X bottom-line
|
||||
bind-key -T copy-mode-vi T send-keys -X scroll-down
|
||||
bind-key -T copy-mode-vi c send-keys -X cursor-left
|
||||
bind-key -T copy-mode-vi t send-keys -X cursor-down
|
||||
bind-key -T copy-mode-vi s send-keys -X cursor-up
|
||||
bind-key -T copy-mode-vi r send-keys -X cursor-right
|
||||
'';
|
||||
};
|
||||
}
|
||||
112
users/modules/vcs/default.nix
Normal file
112
users/modules/vcs/default.nix
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.vcs;
|
||||
in {
|
||||
imports = [./git.nix ./jujutsu.nix];
|
||||
|
||||
options.modules.vcs = {
|
||||
git = {
|
||||
enable = mkEnableOption "enables git";
|
||||
sendmail = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
server = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "mail.phundrak.com";
|
||||
};
|
||||
user = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
encryption = mkOption {
|
||||
type = types.enum ["tls" "ssl" "none"];
|
||||
default = "none";
|
||||
};
|
||||
port = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = 587;
|
||||
};
|
||||
passwordFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Path to a file containing the password necessary for authenticating
|
||||
against the mailserver.
|
||||
|
||||
This file should contain the password only, with no newline.
|
||||
'';
|
||||
};
|
||||
};
|
||||
browser = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
example = "${pkgs.firefox}/bin/firefox";
|
||||
default = null;
|
||||
};
|
||||
completeConfig = mkEnableOption "Complete configuration for workstations";
|
||||
mergeTool = mkOption {
|
||||
type = types.str;
|
||||
default = "ediff";
|
||||
};
|
||||
emacs = {
|
||||
integration = mkEnableOption "enables Emacs integration";
|
||||
pkg = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.emacs;
|
||||
};
|
||||
};
|
||||
};
|
||||
jj.enable = mkEnableOption "enables jujutsu";
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "Lucien Cartier-Tilet";
|
||||
};
|
||||
email = mkOption {
|
||||
type = types.str;
|
||||
default = "lucien@phundrak.com";
|
||||
};
|
||||
editor = mkOption {
|
||||
type = types.str;
|
||||
default = "${pkgs.emacs}/bin/emacsclient -c -a ${pkgs.emacs}/bin/emacs";
|
||||
};
|
||||
publicKey = {
|
||||
content = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
example = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGj+J6N6SO+4P8dOZqfR1oiay2yxhhHnagH52avUqw5h";
|
||||
default = null;
|
||||
};
|
||||
file = mkOption {
|
||||
type = with types; nullOr path;
|
||||
default = "/home/phundrak/.ssh/id_ed25519.pub";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf (cfg.git.enable || cfg.jj.enable) {
|
||||
home.file.".ssh/allowed_signers".text = mkIf (cfg.publicKey.content != null) (mkDefault ''
|
||||
${cfg.email} namespaces="git" ${cfg.publicKey.content}
|
||||
'');
|
||||
modules = {
|
||||
git = mkIf cfg.git.enable {
|
||||
inherit (cfg.git) enable sendmail browser completeConfig emacs mergeTool;
|
||||
inherit (cfg) email name editor;
|
||||
publicKeyFile = cfg.publicKey.file;
|
||||
};
|
||||
jj = mkIf cfg.jj.enable {
|
||||
inherit (cfg.jj) enable;
|
||||
inherit (cfg) name email editor;
|
||||
signing.enable = cfg.publicKey.content != null;
|
||||
signing.sshKey =
|
||||
if (cfg.publicKey.file == null)
|
||||
then cfg.publicKey.content
|
||||
else cfg.publicKey.file;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
273
users/modules/vcs/git.nix
Normal file
273
users/modules/vcs/git.nix
Normal file
@@ -0,0 +1,273 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.git;
|
||||
in {
|
||||
options.modules.git = {
|
||||
enable = mkEnableOption "enables git";
|
||||
email = mkOption {
|
||||
type = types.str;
|
||||
default = "lucien@phundrak.com";
|
||||
};
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "Lucien Cartier-Tilet";
|
||||
};
|
||||
sendmail = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
server = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "mail.phundrak.com";
|
||||
};
|
||||
user = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
encryption = mkOption {
|
||||
type = types.enum ["tls" "ssl" "none"];
|
||||
default = "none";
|
||||
};
|
||||
port = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = 587;
|
||||
};
|
||||
passwordFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Path to a file containing the password necessary for authenticating
|
||||
against the mailserver.
|
||||
|
||||
This file should contain the password only, with no newline.
|
||||
'';
|
||||
};
|
||||
};
|
||||
browser = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
example = "${pkgs.firefox}/bin/firefox";
|
||||
default = null;
|
||||
};
|
||||
completeConfig = mkEnableOption "Complete configuration for workstations";
|
||||
emacs = {
|
||||
integration = mkEnableOption "enables Emacs integration";
|
||||
pkg = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.emacs;
|
||||
};
|
||||
};
|
||||
mergeTool = mkOption {
|
||||
type = types.str;
|
||||
default = "ediff";
|
||||
};
|
||||
editor = mkOption {
|
||||
type = types.str;
|
||||
default = "${pkgs.emacs}/bin/emacsclient -c -a ${pkgs.emacs}/bin/emacs";
|
||||
};
|
||||
publicKeyFile = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.git = let
|
||||
smtpEmail =
|
||||
if (cfg.sendmail.user == null)
|
||||
then cfg.email
|
||||
else cfg.sendmail.user;
|
||||
in {
|
||||
enable = true;
|
||||
userEmail = cfg.email;
|
||||
userName = cfg.name;
|
||||
extraConfig = {
|
||||
color.ui = "auto";
|
||||
column.ui = "auto";
|
||||
tag.sort = "version:refname";
|
||||
core = mkIf cfg.completeConfig {
|
||||
compression = 9;
|
||||
inherit (cfg) editor;
|
||||
whitespace = "fix,-indent-with-non-tab,trailing-space";
|
||||
preloadindex = true;
|
||||
};
|
||||
status = {
|
||||
branch = true;
|
||||
showStash = true;
|
||||
};
|
||||
diff = {
|
||||
algorithm = "histogram";
|
||||
colorMoved = "plain";
|
||||
mnemonicPrefix = true;
|
||||
renames = "copy";
|
||||
interHunkContext = 10;
|
||||
};
|
||||
commit.gpgsign = cfg.publicKeyFile != null;
|
||||
gpg.format = "ssh";
|
||||
gpg.ssh.allowedSignersFile = (mkIf (cfg.publicKeyFile != null)) "~/.ssh/allowed_signers";
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
push = {
|
||||
default = "simple";
|
||||
autoSetupRemote = true;
|
||||
followTags = true;
|
||||
};
|
||||
rebase = {
|
||||
autoSquash = true;
|
||||
autoStash = true;
|
||||
missingCommitsCheck = "warn";
|
||||
updateRefs = true;
|
||||
};
|
||||
help.autocorrect = "prompt";
|
||||
user.signingkey = mkIf (cfg.publicKeyFile != null) cfg.publicKeyFile;
|
||||
web.browser = mkIf (cfg.browser != null) cfg.browser;
|
||||
sendemail = mkIf cfg.sendmail.enable {
|
||||
smtpserver = cfg.sendmail.server;
|
||||
smtpuser = smtpEmail;
|
||||
smtpencryption = cfg.sendmail.encryption;
|
||||
smtpserverport = cfg.sendmail.port;
|
||||
};
|
||||
credentials = mkIf (cfg.sendmail.passwordFile != null) {
|
||||
"smtp://${smtpEmail}@${cfg.sendmail.server}:${toString cfg.sendmail.port}" = {
|
||||
helper = "cat ${cfg.sendmail.passwordFile}";
|
||||
};
|
||||
};
|
||||
magithub = mkIf cfg.emacs.integration {
|
||||
online = true;
|
||||
"status" = {
|
||||
includeStatusHeader = true;
|
||||
includePullRequestsSection = true;
|
||||
includeIssuesSection = true;
|
||||
};
|
||||
};
|
||||
merge = {
|
||||
tool = mkIf cfg.completeConfig cfg.mergeTool;
|
||||
conflictstyle = "zdiff3";
|
||||
};
|
||||
mergetool.ediff.cmd = mkIf (cfg.emacs.integration && cfg.completeConfig) "\"${cfg.emacs.pkg} --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"\"";
|
||||
github.user = "phundrak";
|
||||
url = {
|
||||
"https://phundrak@github.com" = {
|
||||
insteadOf = "https://github.com";
|
||||
};
|
||||
"https://phundrak@labs.phundrak.com" = {
|
||||
insteadOf = "https://labs.phundrak.com";
|
||||
};
|
||||
"https://github.com/RustSec/advisory-db" = {
|
||||
insteadOf = "https://github.com/RustSec/advisory-db";
|
||||
};
|
||||
"git@github.com:Phundrak/" = {
|
||||
insteadOf = "pg:";
|
||||
};
|
||||
"git@labs.phundrak.com/phundrak:" = {
|
||||
insteadOf = "p:";
|
||||
};
|
||||
"git@github.com" = {
|
||||
insteadOf = "gh:";
|
||||
};
|
||||
"git@labs.phundrak.com" = {
|
||||
insteadOf = "labs:";
|
||||
};
|
||||
};
|
||||
};
|
||||
ignores = [
|
||||
".env"
|
||||
".direnv/"
|
||||
|
||||
"*~"
|
||||
"\#*\#"
|
||||
"*.elc"
|
||||
"auto-save-list"
|
||||
".\#*"
|
||||
"*_flymake.*"
|
||||
"/auto/"
|
||||
".projectile"
|
||||
".dir-locals.el"
|
||||
|
||||
"# Org mode files"
|
||||
".org-id-locations"
|
||||
"*_archive"
|
||||
|
||||
"*.out"
|
||||
"*.o"
|
||||
"*.so"
|
||||
|
||||
"# Archives"
|
||||
"*.7zz"
|
||||
"*.dmg"
|
||||
"*.gz"
|
||||
"*.iso"
|
||||
"*.jar"
|
||||
"*.rar"
|
||||
"*.tar"
|
||||
"*.zip"
|
||||
|
||||
"*.log"
|
||||
"*.sqlite"
|
||||
|
||||
"dist/"
|
||||
];
|
||||
aliases = {
|
||||
a = "add --all";
|
||||
aca = "!git add --all && git commit --amend";
|
||||
acan = "!git add --all && git commit --amend --no-edit";
|
||||
ap = "add --patch";
|
||||
b = "branch";
|
||||
bd = "branch -d";
|
||||
bdd = "branch -D";
|
||||
c = "commit -S";
|
||||
ca = "commit -Sa";
|
||||
can = "commit -Sa --no-edit";
|
||||
cm = "commit -Sm";
|
||||
cam = "commit -Sam";
|
||||
co = "checkout";
|
||||
cob = "checkout -b";
|
||||
cod = "checkout develop";
|
||||
cl = "clone";
|
||||
cl1 = "clone --depth 1";
|
||||
f = "fetch";
|
||||
fp = "fetch --prune";
|
||||
ps = "push";
|
||||
psf = "push --force-with-lease";
|
||||
pso = "push origin";
|
||||
psfo = "push --force-with-lease origin";
|
||||
pushall = "!git remote \vert{} xargs -L1 git push";
|
||||
psl = "!git remote \vert{} xargs -L1 git push";
|
||||
pullall = "!git remote \vert{} xargs -L1 git pull";
|
||||
pll = "!git remote \vert{} xargs -L1 git pull";
|
||||
pl = "pull";
|
||||
pb = "pull --rebase";
|
||||
r = "rebase";
|
||||
ra = "rebase --abort";
|
||||
rc = "rebase --continue";
|
||||
rd = "rebase develop";
|
||||
ri = "rebase -i";
|
||||
rmf = "rm -f";
|
||||
rmd = "rm -r";
|
||||
rmdf = "rm -rf";
|
||||
sm = "submodule";
|
||||
sms = "submodule status";
|
||||
sma = "submodule add";
|
||||
smu = "submodule update";
|
||||
smui = "submodule update --init";
|
||||
smuir = "submodule update --init --recursive";
|
||||
st = "stash";
|
||||
stc = "stash clear";
|
||||
stp = "stash pop";
|
||||
stw = "stash show";
|
||||
u = "reset --";
|
||||
d = "diff -w";
|
||||
l = "log --all --oneline --graph --decorate --pretty=format':%C(magenta)%h %C(white) %an %ar%C(auto) %D%n%s%n'";
|
||||
s = "status";
|
||||
staged = "diff --cached";
|
||||
upstream = "!git push -u origin HEAD";
|
||||
unstage = "reset --";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
55
users/modules/vcs/jujutsu.nix
Normal file
55
users/modules/vcs/jujutsu.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.modules.jj;
|
||||
in {
|
||||
options.modules.jj = {
|
||||
enable = mkEnableOption "enables jj";
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "Lucien Cartier-Tilet";
|
||||
};
|
||||
email = mkOption {
|
||||
type = types.str;
|
||||
default = "lucien@phundrak.com";
|
||||
};
|
||||
editor = mkOption {
|
||||
type = types.str;
|
||||
default = "${pkgs.emacs}/bin/emacsclient -c -a ${pkgs.emacs}/bin/emacs";
|
||||
};
|
||||
signing = {
|
||||
enable = mkEnableOption "enables signing jj commits";
|
||||
sshKey = mkOption {
|
||||
type = with types; nullOr (either path str);
|
||||
example = "~/.ssh/id_ed25519.pub";
|
||||
default = "~/.ssh/id_ed25519.pub";
|
||||
description = "Path to the public SSH key or its content.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config.programs.jujutsu = mkIf cfg.enable {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
inherit (cfg) name email;
|
||||
};
|
||||
ui = {
|
||||
default-command = "st";
|
||||
pager = ":builtin";
|
||||
inherit (cfg) editor;
|
||||
};
|
||||
signing = mkIf cfg.signing.enable {
|
||||
behavior = "own";
|
||||
backend = "ssh";
|
||||
key = cfg.signing.sshKey;
|
||||
backends."ssh.allowed-signers" = "~/.ssh/allowed_signers";
|
||||
backends."ssh.program" = "${pkgs.openssh}/bin/ssh-keygen";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
68
users/modules/wofi.nix
Normal file
68
users/modules/wofi.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
programs.wofi = {
|
||||
enable = true;
|
||||
settings = {
|
||||
modi = "ssh,drun,combi";
|
||||
sidebar-mode = false;
|
||||
width = 30;
|
||||
line-margin = 10;
|
||||
lines = 6;
|
||||
columns = 2;
|
||||
display-ssh = "";
|
||||
display-run = "";
|
||||
display-drun = "";
|
||||
display-window = "";
|
||||
display-combi = "";
|
||||
show-icons = true;
|
||||
};
|
||||
# from https://github.com/alxndr13/wofi-nord-theme
|
||||
style = ''
|
||||
* {
|
||||
font-family: "Hack", monospace;
|
||||
}
|
||||
|
||||
window {
|
||||
background-color: #3B4252;
|
||||
}
|
||||
|
||||
#input {
|
||||
margin: 5px;
|
||||
border-radius: 0px;
|
||||
border: none;
|
||||
background-color: #3B4252;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
background-color: #383C4A;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
margin: 2px;
|
||||
padding: 10px;
|
||||
background-color: #383C4A;
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
#text {
|
||||
padding: 4px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#entry:nth-child(even){
|
||||
background-color: #404552;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
background-color: #4C566A;
|
||||
}
|
||||
|
||||
#text:selected {
|
||||
background: transparent;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
10
users/modules/yt-dlp.nix
Normal file
10
users/modules/yt-dlp.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
programs.yt-dlp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
embed-thumbnail = true;
|
||||
embed-subs = true;
|
||||
sub-langs = "all";
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user