Compare commits

...

13 commits

Author SHA1 Message Date
6a43ef3bd9
feat: done with cli migration 2025-05-31 14:00:31 -07:00
76224a7113
feat: zoxide 2025-05-31 14:00:08 -07:00
00a252a009
feat: wget 2025-05-31 13:54:34 -07:00
fd4481a2e1
feat: tmux 2025-05-31 13:54:34 -07:00
b3fe1164fd
feat: tea 2025-05-31 13:54:34 -07:00
b8f1295953
feat: systemctl 2025-05-31 13:54:34 -07:00
57a6f61802
feat: starship 2025-05-31 12:34:57 -07:00
1922579c77
fix: repl 2025-05-31 12:20:03 -07:00
5633ed5914
style: divider too long 2025-05-31 12:11:00 -07:00
80db008bb7
feat: ssh 2025-05-28 18:35:36 -07:00
16f2e7fd18
feat: ripgrep 2025-05-28 18:26:49 -07:00
854b296c07
feat: delete rbw 2025-05-28 18:19:43 -07:00
bad48abd05
feat: nix-output-monitor 2025-05-28 18:19:43 -07:00
31 changed files with 398 additions and 334 deletions

View file

@ -36,4 +36,22 @@
else "Whether to enable ${name}.";
type = lib.types.bool;
};
## Like lib.mkDefault, but uses lib.mapAttrsRecursive to apply mkDefault to
## every attr in the set.
##
## ```nix
## starship.settings.username = mkDefault' {
## enabled = true;
## show_always = false;
## };
## ```
## is equivalent to:
## ```nix
## starship.settings.username = {
## enabled = mkDefault true;
## show_always = mkDefault false;
## };
## ```
mkDefault' = set: lib.mapAttrsRecursive (_: value: lib.mkDefault value) set;
}

View file

@ -6,6 +6,7 @@
./stylix
./programs
./services
./profiles.nix
./home.nix

View file

@ -69,7 +69,7 @@
pkgs.writeShellScriptBin "nrepl"
# sh
''
nix repl "${toString ./.}/repl.nix" "$@"
nix repl --file "${toString ../../repl.nix}" "$@"
'';
in [
nrepl

View file

@ -17,6 +17,13 @@ in {
jq = enabled;
less = enabled;
neovim = enabled;
nix-output-monitor = enabled;
ripgrep = enabled;
wget = enabled;
};
services = {
openssh = enabled; # required for agenix
};
}
#

View file

@ -5,5 +5,8 @@
./jq.nix
./less.nix
./neovim.nix
./nix-output-monitor.nix
./ripgrep.nix
./wget.nix
];
}

View file

@ -1,15 +1,16 @@
{
lib,
config,
lib,
pkgs,
...
}: let
cfg = config.marleyos.programs.nix-output-monitor;
in {
options.marleyos.programs.nix-output-monitor.enable = lib.mkEnableOption "nix-output-monitor";
options.marleyos.programs.nix-output-monitor.enable =
lib.mkEnableOption "nix-output-monitor";
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
environment.systemPackages = with pkgs; [
nix-output-monitor
];
};

View file

@ -1,6 +1,7 @@
{
lib,
config,
lib,
pkgs,
...
}: let
cfg = config.marleyos.programs.ripgrep;
@ -8,6 +9,8 @@ in {
options.marleyos.programs.ripgrep.enable = lib.mkEnableOption "ripgrep";
config = lib.mkIf cfg.enable {
programs.ripgrep.enable = true;
environment.systemPackages = with pkgs; [
ripgrep
];
};
}

View file

@ -0,0 +1,16 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.marleyos.programs.wget;
in {
options.marleyos.programs.wget.enable = lib.mkEnableOption "wget";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
wget
];
};
}

View file

@ -0,0 +1,5 @@
{
imports = [
./openssh.nix
];
}

View file

@ -0,0 +1,19 @@
{
lib,
config,
...
}: let
cfg = config.marleyos.services.openssh;
in {
options.marleyos.services.openssh.enable = lib.mkEnableOption "openssh";
config = lib.mkIf cfg.enable {
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "prohibit-password";
};
};
};
}

View file

@ -0,0 +1,5 @@
{
imports = [
./openssh.nix
];
}

View file

@ -0,0 +1,13 @@
{
lib,
config,
...
}: let
cfg = config.marleyos.services.openssh;
in {
config = lib.mkIf cfg.enable {
services.openssh.extraConfig = ''
PermitRootLogin prohibit-password
'';
};
}

View file

@ -27,6 +27,13 @@ in {
less = enabled;
man = enabled;
nh = enabled;
ripgrep = enabled;
ssh = enabled;
starship = enabled;
systemctl = enabled;
tmux = enabled;
wget = enabled;
zoxide = enabled;
};
}
#
@ -43,6 +50,7 @@ in {
nemo = enabled;
neo = enabled;
neovim = enabled;
tea = enabled;
};
services = {

View file

@ -24,7 +24,15 @@
./neo.nix
./neovim.nix
./nh.nix
./ripgrep.nix
./ssh.nix
./starship
./systemctl.nix
./tea.nix
./tmux.nix
./waybar.nix
./wget.nix
./zoxide.nix
# TODO: uncomment when swaylock is figured out
# ./wlogout

View file

@ -0,0 +1,19 @@
{
marleylib,
config,
osConfig,
lib,
...
}: let
inherit (marleylib.module) mkEnableOption';
cfg = config.marleyos.programs.ripgrep;
osCfg = osConfig.marleyos.programs.ripgrep;
in {
options.marleyos.programs.ripgrep.enable =
mkEnableOption' "ripgrep" osCfg.enable;
config = lib.mkIf cfg.enable {
programs.ripgrep.enable = true;
};
}

View file

@ -1,6 +1,6 @@
{
lib,
config,
lib,
...
}: let
cfg = config.marleyos.programs.starship;

View file

@ -0,0 +1,208 @@
{
marleylib,
lib,
config,
...
}: let
cfg = config.marleyos.programs.starship;
in {
config = lib.mkIf cfg.enable {
programs.starship.settings = with config.lib.stylix.colors.withHashtag; let
mkFormat = t: " [](fg:${base02})[${t}]($style)[](fg:${base02}) ";
langFormat = mkFormat "$symbol$version";
in
marleylib.module.mkDefault' {
format = lib.concatStrings [
"$username"
"$hostname"
"$directory"
"$nix_shell"
"$git_branch"
"$git_status"
"$fill"
"$c"
"$elixir"
"$elm"
"$golang"
"$haskell"
"$java"
"$julia"
"$nodejs"
"$nim"
"$rust"
"$scala"
"$python"
"$time"
"$line_break"
"$character"
];
username = {
disabled = false;
format = " [](fg:${base02})[ 󰧱 $user@]($style)";
show_always = true;
style_root = "bg:${base02} fg:${base0D}";
style_user = "bg:${base02} fg:${base0D}";
};
hostname = {
ssh_only = false;
format = "[$hostname ]($style)[](fg:${base02}) ";
style = "bg:${base02} fg:${base0D}";
};
directory = {
format = mkFormat " $path ";
style = "bg:${base02} fg:${base0B}";
truncation_length = 3;
truncation_symbol = "/";
substitutions = {
Documents = "󰈙";
Downloads = " ";
Music = " ";
Pictures = " ";
};
};
git_branch = {
format = mkFormat " $symbol $branch ";
style = "bg:${base02} fg:${base0C}";
symbol = "";
};
git_status = {
disabled = false;
style = "bg:${base02} fg:${base08}";
format = mkFormat "$all_status$ahead_behind";
up_to_date = "[ ](bg:${base02} fg:${base0D})";
untracked = "[?\\($count\\)](bg:${base02} fg:${base09})";
stashed = "[\\$](bg:${base02} fg:${base0D})";
modified = "[!\\($count\\)](bg:${base02} fg:${base09})";
renamed = "[»\\($count\\)](bg:${base02} fg:${base0D})";
deleted = "[\\($count\\)](style)";
staged = "[++\\($count\\)](bg:${base02} fg:${base09})";
ahead = "[\\(\${count}\\)](bg:${base02} fg:${base0C})";
diverged = "[\\[](bg:${base02} fg:${base0D})[\\(\${ahead_count}\\)](bg:${base02} fg:${base0C})[\\(\${behind_count}\\)](bg:${base02} fg:${base0A})[\\]](bg:${base02} fg:${base0D})";
behind = "[\\(\${count}\\)](bg:${base02} fg:${base0A})";
};
fill = {
style = "fg:${base02}";
symbol = " ";
};
time = {
disabled = false;
format = mkFormat " $time 󰴈 ";
style = "bg:${base02} fg:${base0A}";
time_format = "%I:%M%P";
use_12hr = true;
};
character = let
vim = "";
mkChar = sym: col: " [${sym}](fg:${col}) [󰄾](fg:${base0C})";
in {
success_symbol = mkChar "" "${base0D}";
error_symbol = mkChar "󰋔" "${base08}";
vimcmd_symbol = mkChar vim "${base0A}";
vimcmd_replace_one_symbol = mkChar vim "${base0C}";
vimcmd_replace_symbol = mkChar vim "${base0C}";
vimcmd_visual_symbol = mkChar vim "${base0D}";
};
### Languages ###
c = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
elixir = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
elm = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
haskell = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
java = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
julia = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
nodejs = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = "󰎙 ";
};
nim = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = "󰆥 ";
};
python = {
style = "bg:${base02} fg:${base0B}";
disabled = false;
symbol = " ";
};
rust = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = "";
};
scala = {
style = "bg:${base02} fg:${base0B}";
format = langFormat;
disabled = false;
symbol = " ";
};
### Tools ###
conda = {
style = "bg:${base02} fg:${base0B}";
format = mkFormat "$symbol$environment";
disabled = false;
symbol = "🅒 ";
};
nix_shell = {
style = "bg:${base02} fg:${base0C}";
format = mkFormat " $symbol $state( \($name\)) ";
disabled = false;
symbol = " ";
};
};
};
}

View file

@ -0,0 +1,30 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.marleyos.programs.systemctl;
in {
options.marleyos.programs.systemctl.enable = lib.mkEnableOption "systemctl";
config = lib.mkIf (cfg.enable && pkgs.stdenv.isLinux) {
home.shellAbbrs = rec {
sctl = "systemctl";
sctls = "systemctl status";
sctle = "systemctl enable --now";
sctld = "systemctl disable --now";
sctlr = "systemctl restart";
sctla = "systemctl start";
sctlo = "systemctl stop";
ssctl = "sudo ${sctl}";
ssctls = "sudo ${sctls}";
ssctle = "sudo ${sctle}";
ssctld = "sudo ${sctld}";
ssctlr = "sudo ${sctlr}";
ssctla = "sudo ${sctla}";
ssctlo = "sudo ${sctlo}";
};
};
}

View file

@ -0,0 +1,16 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.marleyos.programs.tea;
in {
options.marleyos.programs.tea.enable = lib.mkEnableOption "tea";
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
tea
];
};
}

View file

@ -1,6 +1,6 @@
{
lib,
config,
lib,
pkgs,
...
}: let

View file

@ -1,12 +1,17 @@
{
marleylib,
lib,
config,
osConfig,
pkgs,
...
}: let
inherit (marleylib.module) mkEnableOption';
cfg = config.marleyos.programs.wget;
osCfg = osConfig.marleyos.programs.wget;
in {
options.marleyos.programs.wget.enable = lib.mkEnableOption "wget";
options.marleyos.programs.wget.enable = mkEnableOption' "wget" osCfg.enable;
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [

View file

@ -1,6 +1,6 @@
{
lib,
config,
lib,
...
}: let
cfg = config.marleyos.programs.zoxide;

View file

@ -9,16 +9,14 @@
inherit (marleylib.module) enabled;
in {
marleyos = lib.mkMerge [
# Universal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Universal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{
programs = {
fish = enabled;
nh = enabled;
};
services = {
docker = enabled;
openssh = enabled; # needed for agenix
};
}
#

View file

@ -5,15 +5,9 @@
}: let
cfg = config.marleyos.services.openssh;
in {
options.marleyos.services.openssh.enable = lib.mkEnableOption "openssh";
config = lib.mkIf cfg.enable {
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "prohibit-password";
};
services.openssh.settings = {
PermitRootLogin = "prohibit-password";
};
};
}

View file

@ -1,47 +0,0 @@
{
lib,
config,
...
}: let
cfg = config.marleyos.programs.cli;
inherit (lib.marleyos) enabled;
in {
options.marleyos.programs.cli.enable = lib.mkEnableOption "cli";
config = lib.mkIf cfg.enable {
marleyos.programs = {
agenix = enabled;
bat = enabled;
# cheat = enabled;
curl = enabled;
eza = enabled;
figlet = enabled;
fish = enabled;
fzf = enabled;
gh = enabled;
git = enabled;
glow = enabled;
gpg = enabled;
httpie = enabled;
hyfetch = enabled;
journalctl = enabled;
jq = enabled;
just = enabled;
less = enabled;
man = enabled;
neo = enabled;
nh = enabled;
nix-output-monitor = enabled;
rbw = enabled;
ripgrep = enabled;
ssh = enabled;
starship = enabled;
systemctl = enabled;
tea = enabled;
tmux = enabled;
wget = enabled;
zoxide = enabled;
};
};
}

View file

@ -1,17 +0,0 @@
{
lib,
config,
...
}: let
cfg = config.marleyos.programs.rbw;
in {
options.marleyos.programs.rbw.enable = lib.mkEnableOption "rbw";
config = lib.mkIf cfg.enable {
programs.rbw = {
enable = true;
settings.email = "bitwarden@punkfairie.net";
};
};
}

View file

@ -1,208 +0,0 @@
{
lib,
config,
...
}: let
inherit (lib) mkDefault;
cfg = config.marleyos.programs.starship;
in {
config = lib.mkIf cfg.enable {
programs.starship.settings = with config.lib.stylix.colors.withHashtag; let
mkFormat = t: " [](fg:${base02})[${t}]($style)[](fg:${base02}) ";
langFormat = mkFormat "$symbol$version";
in {
format = mkDefault (lib.concatStrings [
"$username"
"$hostname"
"$directory"
"$nix_shell"
"$git_branch"
"$git_status"
"$fill"
"$c"
"$elixir"
"$elm"
"$golang"
"$haskell"
"$java"
"$julia"
"$nodejs"
"$nim"
"$rust"
"$scala"
"$python"
"$time"
"$line_break"
"$character"
]);
username = {
disabled = mkDefault false;
format = mkDefault " [](fg:${base02})[ 󰧱 $user@]($style)";
show_always = mkDefault true;
style_root = mkDefault "bg:${base02} fg:${base0D}";
style_user = mkDefault "bg:${base02} fg:${base0D}";
};
hostname = {
ssh_only = mkDefault false;
format = mkDefault "[$hostname ]($style)[](fg:${base02}) ";
style = mkDefault "bg:${base02} fg:${base0D}";
};
directory = {
format = mkDefault (mkFormat " $path ");
style = mkDefault "bg:${base02} fg:${base0B}";
truncation_length = mkDefault 3;
truncation_symbol = mkDefault "/";
substitutions = {
Documents = mkDefault "󰈙";
Downloads = mkDefault " ";
Music = mkDefault " ";
Pictures = mkDefault " ";
};
};
git_branch = {
format = mkDefault (mkFormat " $symbol $branch ");
style = mkDefault "bg:${base02} fg:${base0C}";
symbol = mkDefault "";
};
git_status = {
disabled = mkDefault false;
style = mkDefault "bg:${base02} fg:${base08}";
format = mkDefault (mkFormat "$all_status$ahead_behind");
up_to_date = mkDefault "[ ](bg:${base02} fg:${base0D})";
untracked = mkDefault "[?\\($count\\)](bg:${base02} fg:${base09})";
stashed = mkDefault "[\\$](bg:${base02} fg:${base0D})";
modified = mkDefault "[!\\($count\\)](bg:${base02} fg:${base09})";
renamed = mkDefault "[»\\($count\\)](bg:${base02} fg:${base0D})";
deleted = mkDefault "[\\($count\\)](style)";
staged = mkDefault "[++\\($count\\)](bg:${base02} fg:${base09})";
ahead = mkDefault "[\\(\${count}\\)](bg:${base02} fg:${base0C})";
diverged = mkDefault "[\\[](bg:${base02} fg:${base0D})[\\(\${ahead_count}\\)](bg:${base02} fg:${base0C})[\\(\${behind_count}\\)](bg:${base02} fg:${base0A})[\\]](bg:${base02} fg:${base0D})";
behind = mkDefault "[\\(\${count}\\)](bg:${base02} fg:${base0A})";
};
fill = {
style = mkDefault "fg:${base02}";
symbol = mkDefault " ";
};
time = {
disabled = mkDefault false;
format = mkDefault (mkFormat " $time 󰴈 ");
style = mkDefault "bg:${base02} fg:${base0A}";
time_format = mkDefault "%I:%M%P";
use_12hr = mkDefault true;
};
character = let
vim = "";
mkChar = sym: col: " [${sym}](fg:${col}) [󰄾](fg:${base0C})";
in {
success_symbol = mkChar "" "${base0D}";
error_symbol = mkChar "󰋔" "${base08}";
vimcmd_symbol = mkChar vim "${base0A}";
vimcmd_replace_one_symbol = mkChar vim "${base0C}";
vimcmd_replace_symbol = mkChar vim "${base0C}";
vimcmd_visual_symbol = mkChar vim "${base0D}";
};
### Languages ###
c = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
elixir = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
elm = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
haskell = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
java = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
julia = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault " ";
};
nodejs = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault "󰎙 ";
};
nim = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault "󰆥 ";
};
python = {
style = mkDefault "bg:${base02} fg:${base0B}";
disabled = mkDefault false;
symbol = mkDefault " ";
};
rust = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = mkDefault false;
symbol = mkDefault "";
};
scala = {
style = "bg:${base02} fg:${base0B}";
format = mkDefault langFormat;
disabled = false;
symbol = " ";
};
### Tools ###
conda = {
style = mkDefault "bg:${base02} fg:${base0B}";
format = mkDefault (mkFormat "$symbol$environment");
disabled = mkDefault false;
symbol = mkDefault "🅒 ";
};
nix_shell = {
style = "bg:${base02} fg:${base0C}";
format = mkDefault (mkFormat " $symbol $state( \($name\)) ");
disabled = mkDefault false;
symbol = mkDefault " ";
};
};
};
}

View file

@ -1,21 +0,0 @@
{
lib,
config,
...
}: let
cfg = config.marleyos.programs.systemctl;
in {
options.marleyos.programs.systemctl.enable = lib.mkEnableOption "systemctl";
config = lib.mkIf cfg.enable {
home.shellAbbrs = {
sctl = "sudo systemctl";
sctls = "sudo systemctl status";
sctle = "sudo systemctl enable --now";
sctld = "sudo systemctl disable --now";
sctlr = "sudo systemctl restart";
sctla = "sudo systemctl start";
sctlo = "sudo systemctl stop";
};
};
}

View file

@ -1,20 +0,0 @@
{
lib,
config,
pkgs,
...
}:
let
inherit (lib) mkEnableOption mkIf;
cfg = config.marleyos.programs.tea;
in
{
options.marleyos.programs.tea.enable = mkEnableOption "tea";
config = mkIf cfg.enable {
home.packages = with pkgs; [
tea
];
};
}