archlinux 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5a6439dbf4a18b2f03c70c67dd3707dbe0aa860e147bbb86242a5540173fe09
4
- data.tar.gz: 2b56713549a7861cf2602e3132f66c94a66d10419de67fe89ea973a32724e6bc
3
+ metadata.gz: 9a503802bfcc8eecbd6b5605d96f6cf9de4ded00319ec74c9a091d56840fd86b
4
+ data.tar.gz: 31a14e3c70aed70bad24a5a716fb3088093866ea2db7c7e46b87ca3c101aad24
5
5
  SHA512:
6
- metadata.gz: 69423c894c111c99ca618d9b86e17f10e7b040edd8e2facb06fa6dd599fb37d1b4011162da28a13dc73e2f15859437c36cb5284e1b0e393f25c014da5543ea9d
7
- data.tar.gz: 4823b44bfdb3ca749657bf81d1b003cd5abb72f08d822d5880890a8cd6b561855f05f5df46b618b48ede8cbe3874f999e3f2372016d50e200a988ca3c73196bf
6
+ metadata.gz: af974b69974f277bf426b912c7619ba7fc6d87ea4fc7dfa86b5858c6abe9b2a6b862d8d32359344d566c2d4a59fd92a74be14ef3fa4bb1cbe955887c07321e80
7
+ data.tar.gz: 712fc0f6b8035b038facd41ea33df1185be0819d77f0b11caf91cc08440d3432d1765e1eb652aa83865037d6e8d1f0d464475222dcf77264d6acd5493bfe91e2
data/archlinux.gemspec CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.files = `git ls-files`.lines.map(&:chomp)
5
5
  s.name = 'archlinux'
6
6
  s.summary = "Archlinux DSL to manage whole system state"
7
- s.version = '0.1.0'
7
+ s.version = '0.2.0'
8
8
  s.licenses = ["GPL-3.0-or-later"]
9
9
  s.metadata['rubygems_mfa_required'] = 'true'
10
10
  s.required_ruby_version = '>=3.0'
@@ -47,6 +47,15 @@ def symlink(target, link_name)
47
47
  exit
48
48
  end
49
49
 
50
+ # Check if file exists and is a symlink
51
+ if File.exist?(link_name) && File.symlink?(link_name)
52
+ links_to = File.readlink(link_name)
53
+ next if links_to == target # skip creating link if it's already exists
54
+
55
+ # Remove the link if it links to something else
56
+ File.unlink link_name
57
+ end
58
+
50
59
  log "Linking", target: target, link_name: link_name
51
60
 
52
61
  # make the parent if it doesn't exist
@@ -19,29 +19,28 @@ def package(*names)
19
19
 
20
20
  # install step to install packages required and remove not required
21
21
  on_install do
22
- # install missing packages
23
- need_install = @packages.reject { |p| package? p }
24
- need_install_args = need_install.join(" ")
25
- if need_install.any?
26
- log "Installing packages", packages: need_install
27
- sudo "pacman --noconfirm --needed -S #{need_install_args}"
28
- end
29
-
30
- # expand groups to packages
22
+ # Expand groups to packages
31
23
  packages_args = @packages.join(" ")
32
24
  group_packages = Set.new(`pacman --quiet -Sg #{packages_args}`.lines.map(&:strip))
33
25
 
34
- # full list of packages that should exist on the system
35
- all = @packages + group_packages
26
+ all = @packages + group_packages # full list of packages that should exist on the system
36
27
 
37
28
  # actual list on the system
38
29
  installed = Set.new(`pacman -Q --quiet --explicit --unrequired --native`.lines.map(&:strip))
39
30
 
40
31
  unneeded = installed - all
41
- next if unneeded.empty?
32
+ if unneeded.any?
33
+ log "Removing packages", packages: unneeded
34
+ sudo("pacman -Rsu #{unneeded.join(" ")}")
35
+ end
42
36
 
43
- log "Removing packages", packages: unneeded
44
- sudo("pacman -Rsu #{unneeded.join(" ")}")
37
+ # install missing packages
38
+ need_install = @packages.reject { |p| package? p }
39
+ need_install_args = need_install.join(" ")
40
+ if need_install.any?
41
+ log "Installing packages", packages: need_install
42
+ sudo "pacman --noconfirm --needed -S #{need_install_args}"
43
+ end
45
44
  end
46
45
  end
47
46
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archlinux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emad Elsaid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-28 00:00:00.000000000 Z
11
+ date: 2024-04-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: