Compare commits

...

8 Commits

11 changed files with 561 additions and 25 deletions

24
flake.lock generated
View File

@ -28,11 +28,11 @@
]
},
"locked": {
"lastModified": 1748489961,
"narHash": "sha256-uGnudxMoQi2c8rpPoHXuQSm80NBqlOiNF4xdT3hhzLM=",
"lastModified": 1751638848,
"narHash": "sha256-7HiC6w4ROEbMmKtj5pilnLOJej9HkkfU9wEd5QSTyNo=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "95c988cf08e9a5a8fe7cc275d5e3f24e9e87bd51",
"rev": "7d9e3c35f0d46f82bac791d76260f15f53d83529",
"type": "github"
},
"original": {
@ -49,11 +49,11 @@
]
},
"locked": {
"lastModified": 1748352827,
"narHash": "sha256-sNUUP6qxGkK9hXgJ+p362dtWLgnIWwOCmiq72LAWtYo=",
"lastModified": 1751313918,
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
"owner": "nix-darwin",
"repo": "nix-darwin",
"rev": "44a7d0e687a87b73facfe94fba78d323a6686a90",
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
"type": "github"
},
"original": {
@ -65,11 +65,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1748406211,
"narHash": "sha256-B3BsCRbc+x/d0WiG1f+qfSLUy+oiIfih54kalWBi+/M=",
"lastModified": 1751596331,
"narHash": "sha256-7WSzIrw0nCl8iYroj7c//LLsf2zgNEIJNyUSvx4MPLI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3d1f29646e4b57ed468d60f9d286cde23a8d1707",
"rev": "472908faa934435cf781ae8fac77291af3d137d3",
"type": "github"
},
"original": {
@ -88,11 +88,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1748508910,
"narHash": "sha256-KIe/4Vum4kUvj8BP5cNhc3yUdfyU1ajS/tKSxstVgZw=",
"lastModified": 1751642422,
"narHash": "sha256-hvYrV5Wu6EwIIVsq9hpnIacrvykgZ7SxgTQ4a465sag=",
"owner": "nix-community",
"repo": "NUR",
"rev": "624ce0fd6d30a2e9ed2bf8da7daab2b0a84ffa76",
"rev": "390876721dd32c9797da8935dd912477c4533311",
"type": "github"
},
"original": {

View File

@ -22,16 +22,14 @@
# Necessary for using flakes on this system.
nix.settings.experimental-features = "nix-command flakes";
# Enable alternative shell support in nix-darwin.
# programs.fish.enable = true;
nix.settings.warn-dirty = false;
# Set Git commit hash for darwin-version.
system.configurationRevision = self.rev or self.dirtyRev or null;
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
system.stateVersion = 5;
system.stateVersion = 6;
# The platform the configuration will be used on.
nixpkgs.hostPlatform = "aarch64-darwin";
@ -66,8 +64,13 @@
homebrew = {
enable = true;
brews = [];
casks = [ "raycast" "firefox" "slack" ];
brews = [ "asdf" "libyaml" "libpq" "k9s"
{
name = "postgresql@17";
restart_service = "changed";
}
];
casks = [ "raycast" "firefox" "slack" "google-chrome" "cursor" "qbittorrent" "vlc" "obsidian" ];
onActivation = {
cleanup = "zap";
};
@ -89,15 +92,13 @@
services = {
tailscale = {
enable = true;
};
tailscale.enable = true;
};
home-manager.useGlobalPkgs = true;
home-manager.backupFileExtension = "bak";
home-manager.users.andrei = {
home.packages = [];
home.packages = [ pkgs.go];
home.stateVersion = "25.11";
programs = {
@ -126,6 +127,10 @@
packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
onepassword-password-manager
sponsorblock
imagus
reddit-enhancement-suite
react-devtools
];
settings = {};
};
@ -136,7 +141,7 @@
"full-screen-api.warning.timeout" = 0;
"browser.fullscreen.exit_on_escape" = false;
"browser.tabs.closeWindowWithLastTab" = false;
"browser.ctrlTab.recentlyUsedOrder" = true;
"browser.ctrlTab.sortByRecentlyUsed" = true;
"browser.startup.page" = 3;
};
};
@ -151,6 +156,11 @@
pkgs.vscode-extensions.ms-vscode-remote.remote-ssh
pkgs.vscode-extensions.ms-vscode-remote.remote-ssh-edit
pkgs.vscode-extensions.jnoortheen.nix-ide
pkgs.vscode-extensions.ms-dotnettools.csdevkit
pkgs.vscode-extensions.ms-dotnettools.csharp
pkgs.vscode-extensions.ms-dotnettools.vscode-dotnet-runtime
pkgs.vscode-extensions.shopify.ruby-lsp
pkgs.vscode-extensions.castwide.solargraph
];
userSettings = {
"editor.fontSize" = 16;
@ -158,6 +168,7 @@
"editor.fontLigatures" = true;
"security.workspace.trust.enabled" = false;
"remote.SSH.enableAgentForwarding" = true;
"git.enableSmartCommit" = true;
};
};
};
@ -173,7 +184,7 @@
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
#silent = true;
silent = true;
};
zsh = {
enable = true;
@ -186,6 +197,10 @@
syntaxHighlighting = {
enable = true;
};
envExtra = ''
# Add asdf shims to PATH
export PATH="$HOME/.asdf/shims:$PATH"
'';
};
git = {
enable = true;
@ -206,17 +221,23 @@
};
init.defaultBranch = "main";
pull.rebase = true;
push.autoSetupRemote = true;
"url \"git@github.com:\"".insteadOf = "gh:";
"url \"git@gitlab.com:\"".insteadOf = "gl:";
"url \"git@git.lazarescu.xyz:2222/lazandrei19/\"".insteadOf = "lz:";
};
};
gh = {
enable = true;
settings = {
git_protocol = "ssh";
};
};
};
services = {
ollama = {
enable = true;
# loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b" "devstral:24b" "gemma3:12b" "gemma3:1b" ];
};
};
};

2
scripts/edit-os/.envrc Normal file
View File

@ -0,0 +1,2 @@
watch_file gemset.nix
use flake

1
scripts/edit-os/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.direnv

7
scripts/edit-os/Gemfile Normal file
View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
gem "ruby_llm", "~> 1.3"

View File

@ -0,0 +1,42 @@
GEM
remote: https://rubygems.org/
specs:
base64 (0.3.0)
event_stream_parser (1.0.0)
faraday (2.13.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-multipart (1.1.0)
multipart-post (~> 2.0)
faraday-net_http (3.4.0)
net-http (>= 0.5.0)
faraday-retry (2.3.1)
faraday (~> 2.0)
json (2.12.2)
logger (1.7.0)
marcel (1.0.4)
multipart-post (2.4.1)
net-http (0.6.0)
uri
ruby_llm (1.3.0)
base64
event_stream_parser (~> 1)
faraday (>= 1.10.0)
faraday-multipart (>= 1)
faraday-net_http (>= 1)
faraday-retry (>= 1)
marcel (~> 1.0)
zeitwerk (~> 2)
uri (1.0.3)
zeitwerk (2.7.3)
PLATFORMS
arm64-darwin-24
ruby
DEPENDENCIES
ruby_llm (~> 1.3)
BUNDLED WITH
2.6.7

View File

@ -0,0 +1,9 @@
require 'ruby_llm'
RubyLLM.configure do |config|
config.ollama_api_base = "http://127.0.0.1:11434/v1"
end
chat = RubyLLM.chat(model: 'qwen3:8b', provider: :ollama)
print chat.ask "What's the best way to learn Ruby? Answer in 10 words or less /nothink"

186
scripts/edit-os/flake.lock generated Normal file
View File

@ -0,0 +1,186 @@
{
"nodes": {
"bob-ruby": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1747288354,
"narHash": "sha256-OcnnbsQ0cKLhXA6T1ytaLUVZViBn5cZoXFsdlvRruSI=",
"owner": "bobvanderlinden",
"repo": "nixpkgs-ruby",
"rev": "5d7598f3059fff0cbd0dc4756f9d87f8cb7f3f7c",
"type": "github"
},
"original": {
"owner": "bobvanderlinden",
"repo": "nixpkgs-ruby",
"type": "github"
}
},
"bundix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1721093334,
"narHash": "sha256-5FghZ0HIETbc0TGcBV8uyixq5z4w/9PF5Puhujz3D1o=",
"owner": "inscapist",
"repo": "bundix",
"rev": "42c08846f7e5d91ef121239fd364feaeb22c0bbc",
"type": "github"
},
"original": {
"owner": "inscapist",
"ref": "main",
"repo": "bundix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fu": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1748856973,
"narHash": "sha256-RlTsJUvvr8ErjPBsiwrGbbHYW8XbB/oek0Gi78XdWKg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e4b09e47ace7d87de083786b404bf232eb6c89d8",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1678875422,
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"bob-ruby": "bob-ruby",
"bundix": "bundix",
"fu": "fu",
"nixpkgs": "nixpkgs",
"ruby-nix": "ruby-nix"
}
},
"ruby-nix": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1744623277,
"narHash": "sha256-0HWA2YD9v71SHyMF11PKnVJcHnrHhRLHDCldlUbzYII=",
"owner": "inscapist",
"repo": "ruby-nix",
"rev": "43964ced23803f49e2d307fbbfd4e03ed23760c0",
"type": "github"
},
"original": {
"owner": "inscapist",
"repo": "ruby-nix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

92
scripts/edit-os/flake.nix Normal file
View File

@ -0,0 +1,92 @@
{
description = "A simple ruby app demo";
nixConfig = {
extra-substituters = "https://nixpkgs-ruby.cachix.org";
extra-trusted-public-keys = "nixpkgs-ruby.cachix.org-1:vrcdi50fTolOxWCZZkw0jakOnUI1T19oYJ+PRYdK4SM=";
};
inputs = {
nixpkgs.url = "nixpkgs";
ruby-nix.url = "github:inscapist/ruby-nix";
# a fork that supports platform dependant gem
bundix = {
url = "github:inscapist/bundix/main";
inputs.nixpkgs.follows = "nixpkgs";
};
fu.url = "github:numtide/flake-utils";
bob-ruby.url = "github:bobvanderlinden/nixpkgs-ruby";
bob-ruby.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{
self,
nixpkgs,
fu,
ruby-nix,
bundix,
bob-ruby,
}:
with fu.lib;
eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ bob-ruby.overlays.default ];
};
rubyNix = ruby-nix.lib pkgs;
# TODO generate gemset.nix with bundix
gemset = if builtins.pathExists ./gemset.nix then import ./gemset.nix else { };
# If you want to override gem build config, see
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/ruby-modules/gem-config/default.nix
gemConfig = { };
# See available versions here: https://github.com/bobvanderlinden/nixpkgs-ruby/blob/master/ruby/versions.json
ruby = pkgs."ruby-3.4.4";
# Running bundix would regenerate `gemset.nix`
bundixcli = bundix.packages.${system}.default;
# Use these instead of the original `bundle <mutate>` commands
bundleLock = pkgs.writeShellScriptBin "bundle-lock" ''
export BUNDLE_PATH=vendor/bundle
bundle lock
'';
bundleUpdate = pkgs.writeShellScriptBin "bundle-update" ''
export BUNDLE_PATH=vendor/bundle
bundle lock --update
'';
in
rec {
inherit
(rubyNix {
inherit gemset ruby;
name = "my-rails-app";
gemConfig = pkgs.defaultGemConfig // gemConfig;
})
env
;
devShells = rec {
default = dev;
dev = pkgs.mkShell {
buildInputs =
[
env
bundixcli
bundleLock
bundleUpdate
]
++ (with pkgs; [
rufo
# more packages here
]);
};
};
}
);
}

176
scripts/edit-os/gemset.nix Normal file
View File

@ -0,0 +1,176 @@
{
base64 = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0yx9yn47a8lkfcjmigk79fykxvr80r4m1i35q82sxzynpbm7lcr7";
target = "ruby";
type = "gem";
};
targets = [];
version = "0.3.0";
};
event_stream_parser = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1j73glgif3f97q3znq9ih67h5i7zd1wqzj2d33w8cqhjf2mkns52";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.0.0";
};
faraday = {
dependencies = ["faraday-net_http" "json" "logger"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xbv450qj2bx0qz9l2pjrd3kc057y6bglc3na7a78zby8ssiwlyc";
target = "ruby";
type = "gem";
};
targets = [];
version = "2.13.1";
};
faraday-multipart = {
dependencies = ["multipart-post"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0l87r9jg06nsh24gwwd1jdnxb1zq89ffybnxab0dd90nfcf0ysw5";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.1.0";
};
faraday-net_http = {
dependencies = ["net-http"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jp5ci6g40d6i50bsywp35l97nc2fpi9a592r2cibwicdb6y9wd1";
target = "ruby";
type = "gem";
};
targets = [];
version = "3.4.0";
};
faraday-retry = {
dependencies = ["faraday"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00swh1var1576yvvz4yfw3xbg3y5ky47kg2rsdh57z213yigl120";
target = "ruby";
type = "gem";
};
targets = [];
version = "2.3.1";
};
json = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1x5b8ipv6g0z44wgc45039k04smsyf95h2m5m67mqq35sa5a955s";
target = "ruby";
type = "gem";
};
targets = [];
version = "2.12.2";
};
logger = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.7.0";
};
marcel = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "190n2mk8m1l708kr88fh6mip9sdsh339d2s6sgrik3sbnvz4jmhd";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.0.4";
};
multipart-post = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1a5lrlvmg2kb2dhw3lxcsv6x276bwgsxpnka1752082miqxd0wlq";
target = "ruby";
type = "gem";
};
targets = [];
version = "2.4.1";
};
net-http = {
dependencies = ["uri"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ysrwaabhf0sn24jrp0nnp51cdv0jf688mh5i6fsz63q2c6b48cn";
target = "ruby";
type = "gem";
};
targets = [];
version = "0.6.0";
};
ruby_llm = {
dependencies = ["base64" "event_stream_parser" "faraday" "faraday-multipart" "faraday-net_http" "faraday-retry" "marcel" "zeitwerk"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bg6rmhr11ich5k2pc3yjdzf969hn2mcmj2k1wnqrkj8g87d8ydd";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.3.0";
};
uri = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "04bhfvc25b07jaiaf62yrach7khhr5jlr5bx6nygg8pf11329wp9";
target = "ruby";
type = "gem";
};
targets = [];
version = "1.0.3";
};
zeitwerk = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "119ypabas886gd0n9kiid3q41w76gz60s8qmiak6pljpkd56ps5j";
target = "ruby";
type = "gem";
};
targets = [];
version = "2.7.3";
};
}